├── .editorconfig ├── .github ├── ISSUE_TEMPLATE │ ├── androidReleaseTemplate.md │ ├── componentReleases.md │ ├── desktopReleaseTemplate.md │ ├── iosReleaseTemplate.md │ ├── qaResourceOther.md │ ├── qaResourcesAndroid.md │ └── qaResourcesDesktop.md └── renovate.json ├── Crypto Wallet Dev Components └── 1.0.25 │ ├── Brave-Browser - 1.0.25 Dev Linux.tar.gz │ ├── Brave-Browser -1.0.25 Dev Win.zip │ └── Brave-Browser-Nightly - 1.0.25 Dev macOS.zip ├── LICENSE ├── README.md ├── SampleBookmarks ├── brave_sorted_1000.html ├── brave_sorted_3000.html ├── brave_sorted_4000.html └── brave_sorted_5000.html ├── WikiTemplate ├── Android │ ├── wikitemplate-android.md │ └── wikitemplate-minorCRbumpAndroid.md ├── Crypto │ ├── wikitemplate-cryptoAndroid.md │ ├── wikitemplate-cryptoDesktop.md │ └── wikitemplate-cryptoiOS.md ├── Desktop │ ├── Major_CR_Bump │ │ └── wikitemplate-majorChromiumBumpUpgrades.md │ ├── Minor_CR_Bump │ │ ├── wikitemplate-minorCRbump-macOS-arm64.md │ │ ├── wikitemplate-minorCRbump-macOS-x64.md │ │ └── wikitemplate-minorCRbumpDesktop.md │ ├── wikitemplate-macOS-arm64.md │ ├── wikitemplate-macOS-x64.md │ └── wikitemplate.md ├── Goupdater │ └── wikitemplate-goupdate.md ├── IPFS │ └── wikitemplate-IPFS.md ├── Tor │ ├── wikitemplate-tor-Linux.md │ ├── wikitemplate-tor-Windows.md │ ├── wikitemplate-tor-macOS(Intel).md │ ├── wikitemplate-tor-macOS(arm64).md │ └── wikitemplate-tor.md └── iOS │ └── wikitemplate-ios.md ├── brave_testrun_generator.py ├── braveautogen-pre-release-only.py ├── changelog.py └── testlinks.json /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig helps developers define and maintain consistent 2 | # coding styles between different editors and IDEs 3 | # editorconfig.org 4 | 5 | root = true 6 | 7 | [*] 8 | indent_style = space 9 | indent_size = 2 10 | trim_trailing_whitespace = true 11 | end_of_line = lf 12 | charset = utf-8 13 | insert_final_newline = true 14 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/androidReleaseTemplate.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Android Release 3 | about: 'Template for Android releases' 4 | title: "" 5 | labels: OS/Android 6 | assignees: '' 7 | --- 8 | 9 | ### `[add release number]` 10 | 11 | #### Release Date/Target: 12 | 13 | * Release Date: 14 | 15 | #### Summary: 16 | 17 | Includes the following features/fixes: 18 | 19 | * 20 | * 21 | 22 | **Milestone:** 23 | 24 | 25 | **Current Progress:** 26 | 27 | * ARM --> 28 | * Tablet --> 29 | * x86 --> 30 | 31 | **Manual Passes:** 32 | 33 | * ARM --> 34 | * Tablet --> 35 | * x86 --> -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/componentReleases.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Component Release 3 | about: 'Template for component releases' 4 | title: "" 5 | labels: OS/Desktop 6 | assignees: '' 7 | --- 8 | 9 | ### `[add release/component number]` 10 | 11 | #### Release Date/Target: 12 | 13 | * Release Date: 14 | 15 | #### Summary: 16 | 17 | 18 | **Milestone:** 19 | 20 | 21 | **Current Progress:** 22 | 23 | * macOS --> 24 | * Win--> 25 | * Linux --> 26 | 27 | **Manual Passes:** 28 | 29 | * macOS x64 --> 30 | * Win --> 31 | * Linux --> -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/desktopReleaseTemplate.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Desktop Release 3 | about: 'Template for Desktop releases' 4 | title: "" 5 | labels: OS/Desktop 6 | assignees: '' 7 | --- 8 | 9 | ### `[add release number]` 10 | 11 | #### Release Date/Target: 12 | 13 | * Release Date: 14 | 15 | #### Summary: 16 | 17 | Includes the following features/fixes: 18 | 19 | * 20 | * 21 | 22 | **Milestone:** 23 | 24 | 25 | **Current Progress:** 26 | 27 | * macOS --> 28 | * Win--> 29 | * Linux --> 30 | 31 | **Manual Passes:** 32 | 33 | * macOS x64 --> 34 | * macOS Arm64 --> 35 | * Win --> 36 | * Linux --> -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/iosReleaseTemplate.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: iOS Release 3 | about: 'Template for iOS releases' 4 | title: "" 5 | labels: OS/iOS 6 | assignees: '' 7 | --- 8 | 9 | ### `[add release number]` 10 | 11 | #### Release Date/Target: 12 | 13 | * Release Date: 14 | 15 | #### Summary: 16 | 17 | 18 | **Milestone:** 19 | 20 | 21 | **Current Progress:** 22 | 23 | * iOS 13--> 24 | * iOS 14 --> 25 | 26 | **Manual Passes:** 27 | 28 | * iOS 13--> 29 | * iOS 14 --> -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/qaResourceOther.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Other Request 3 | about: 'Work that is not covered by the other templates' 4 | title: "" 5 | labels: 6 | assignees: '' 7 | --- 8 | 9 | #### Release Date/Target: 10 | 11 | * Release Date/Completion Timing: 12 | 13 | #### Summary: 14 | 15 | #### Related GH issues/Documentation: -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/qaResourcesAndroid.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Requesting QA Resources Android 3 | about: 'Template for requesting QA resources' 4 | title: "" 5 | labels: OS/Android 6 | assignees: '' 7 | --- 8 | 9 | #### Release Date/Target: 10 | 11 | 12 | * Release Date: 13 | 14 | #### Summary: 15 | 16 | 17 | #### Related GH issues/Documentation: 18 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/qaResourcesDesktop.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Requesting QA Resources Desktop 3 | about: 'Template for requesting QA resources' 4 | title: "" 5 | labels: OS/Desktop 6 | assignees: '' 7 | --- 8 | 9 | #### Release Date/Target: 10 | 11 | 12 | * Release Date: 13 | 14 | #### Summary: 15 | 16 | 17 | #### Related GH issues/Documentation: 18 | -------------------------------------------------------------------------------- /.github/renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": [ 4 | "local>brave/renovate-config" 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /Crypto Wallet Dev Components/1.0.25/Brave-Browser - 1.0.25 Dev Linux.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brave/qa-resources/c8d62f38c8325c3e7682a0c4c9e1d923ba9bd698/Crypto Wallet Dev Components/1.0.25/Brave-Browser - 1.0.25 Dev Linux.tar.gz -------------------------------------------------------------------------------- /Crypto Wallet Dev Components/1.0.25/Brave-Browser -1.0.25 Dev Win.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brave/qa-resources/c8d62f38c8325c3e7682a0c4c9e1d923ba9bd698/Crypto Wallet Dev Components/1.0.25/Brave-Browser -1.0.25 Dev Win.zip -------------------------------------------------------------------------------- /Crypto Wallet Dev Components/1.0.25/Brave-Browser-Nightly - 1.0.25 Dev macOS.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brave/qa-resources/c8d62f38c8325c3e7682a0c4c9e1d923ba9bd698/Crypto Wallet Dev Components/1.0.25/Brave-Browser-Nightly - 1.0.25 Dev macOS.zip -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Mozilla Public License Version 2.0 2 | ================================== 3 | 4 | 1. Definitions 5 | -------------- 6 | 7 | 1.1. "Contributor" 8 | means each individual or legal entity that creates, contributes to 9 | the creation of, or owns Covered Software. 10 | 11 | 1.2. "Contributor Version" 12 | means the combination of the Contributions of others (if any) used 13 | by a Contributor and that particular Contributor's Contribution. 14 | 15 | 1.3. "Contribution" 16 | means Covered Software of a particular Contributor. 17 | 18 | 1.4. "Covered Software" 19 | means Source Code Form to which the initial Contributor has attached 20 | the notice in Exhibit A, the Executable Form of such Source Code 21 | Form, and Modifications of such Source Code Form, in each case 22 | including portions thereof. 23 | 24 | 1.5. "Incompatible With Secondary Licenses" 25 | means 26 | 27 | (a) that the initial Contributor has attached the notice described 28 | in Exhibit B to the Covered Software; or 29 | 30 | (b) that the Covered Software was made available under the terms of 31 | version 1.1 or earlier of the License, but not also under the 32 | terms of a Secondary License. 33 | 34 | 1.6. "Executable Form" 35 | means any form of the work other than Source Code Form. 36 | 37 | 1.7. "Larger Work" 38 | means a work that combines Covered Software with other material, in 39 | a separate file or files, that is not Covered Software. 40 | 41 | 1.8. "License" 42 | means this document. 43 | 44 | 1.9. "Licensable" 45 | means having the right to grant, to the maximum extent possible, 46 | whether at the time of the initial grant or subsequently, any and 47 | all of the rights conveyed by this License. 48 | 49 | 1.10. "Modifications" 50 | means any of the following: 51 | 52 | (a) any file in Source Code Form that results from an addition to, 53 | deletion from, or modification of the contents of Covered 54 | Software; or 55 | 56 | (b) any new file in Source Code Form that contains any Covered 57 | Software. 58 | 59 | 1.11. "Patent Claims" of a Contributor 60 | means any patent claim(s), including without limitation, method, 61 | process, and apparatus claims, in any patent Licensable by such 62 | Contributor that would be infringed, but for the grant of the 63 | License, by the making, using, selling, offering for sale, having 64 | made, import, or transfer of either its Contributions or its 65 | Contributor Version. 66 | 67 | 1.12. "Secondary License" 68 | means either the GNU General Public License, Version 2.0, the GNU 69 | Lesser General Public License, Version 2.1, the GNU Affero General 70 | Public License, Version 3.0, or any later versions of those 71 | licenses. 72 | 73 | 1.13. "Source Code Form" 74 | means the form of the work preferred for making modifications. 75 | 76 | 1.14. "You" (or "Your") 77 | means an individual or a legal entity exercising rights under this 78 | License. For legal entities, "You" includes any entity that 79 | controls, is controlled by, or is under common control with You. For 80 | purposes of this definition, "control" means (a) the power, direct 81 | or indirect, to cause the direction or management of such entity, 82 | whether by contract or otherwise, or (b) ownership of more than 83 | fifty percent (50%) of the outstanding shares or beneficial 84 | ownership of such entity. 85 | 86 | 2. License Grants and Conditions 87 | -------------------------------- 88 | 89 | 2.1. Grants 90 | 91 | Each Contributor hereby grants You a world-wide, royalty-free, 92 | non-exclusive license: 93 | 94 | (a) under intellectual property rights (other than patent or trademark) 95 | Licensable by such Contributor to use, reproduce, make available, 96 | modify, display, perform, distribute, and otherwise exploit its 97 | Contributions, either on an unmodified basis, with Modifications, or 98 | as part of a Larger Work; and 99 | 100 | (b) under Patent Claims of such Contributor to make, use, sell, offer 101 | for sale, have made, import, and otherwise transfer either its 102 | Contributions or its Contributor Version. 103 | 104 | 2.2. Effective Date 105 | 106 | The licenses granted in Section 2.1 with respect to any Contribution 107 | become effective for each Contribution on the date the Contributor first 108 | distributes such Contribution. 109 | 110 | 2.3. Limitations on Grant Scope 111 | 112 | The licenses granted in this Section 2 are the only rights granted under 113 | this License. No additional rights or licenses will be implied from the 114 | distribution or licensing of Covered Software under this License. 115 | Notwithstanding Section 2.1(b) above, no patent license is granted by a 116 | Contributor: 117 | 118 | (a) for any code that a Contributor has removed from Covered Software; 119 | or 120 | 121 | (b) for infringements caused by: (i) Your and any other third party's 122 | modifications of Covered Software, or (ii) the combination of its 123 | Contributions with other software (except as part of its Contributor 124 | Version); or 125 | 126 | (c) under Patent Claims infringed by Covered Software in the absence of 127 | its Contributions. 128 | 129 | This License does not grant any rights in the trademarks, service marks, 130 | or logos of any Contributor (except as may be necessary to comply with 131 | the notice requirements in Section 3.4). 132 | 133 | 2.4. Subsequent Licenses 134 | 135 | No Contributor makes additional grants as a result of Your choice to 136 | distribute the Covered Software under a subsequent version of this 137 | License (see Section 10.2) or under the terms of a Secondary License (if 138 | permitted under the terms of Section 3.3). 139 | 140 | 2.5. Representation 141 | 142 | Each Contributor represents that the Contributor believes its 143 | Contributions are its original creation(s) or it has sufficient rights 144 | to grant the rights to its Contributions conveyed by this License. 145 | 146 | 2.6. Fair Use 147 | 148 | This License is not intended to limit any rights You have under 149 | applicable copyright doctrines of fair use, fair dealing, or other 150 | equivalents. 151 | 152 | 2.7. Conditions 153 | 154 | Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted 155 | in Section 2.1. 156 | 157 | 3. Responsibilities 158 | ------------------- 159 | 160 | 3.1. Distribution of Source Form 161 | 162 | All distribution of Covered Software in Source Code Form, including any 163 | Modifications that You create or to which You contribute, must be under 164 | the terms of this License. You must inform recipients that the Source 165 | Code Form of the Covered Software is governed by the terms of this 166 | License, and how they can obtain a copy of this License. You may not 167 | attempt to alter or restrict the recipients' rights in the Source Code 168 | Form. 169 | 170 | 3.2. Distribution of Executable Form 171 | 172 | If You distribute Covered Software in Executable Form then: 173 | 174 | (a) such Covered Software must also be made available in Source Code 175 | Form, as described in Section 3.1, and You must inform recipients of 176 | the Executable Form how they can obtain a copy of such Source Code 177 | Form by reasonable means in a timely manner, at a charge no more 178 | than the cost of distribution to the recipient; and 179 | 180 | (b) You may distribute such Executable Form under the terms of this 181 | License, or sublicense it under different terms, provided that the 182 | license for the Executable Form does not attempt to limit or alter 183 | the recipients' rights in the Source Code Form under this License. 184 | 185 | 3.3. Distribution of a Larger Work 186 | 187 | You may create and distribute a Larger Work under terms of Your choice, 188 | provided that You also comply with the requirements of this License for 189 | the Covered Software. If the Larger Work is a combination of Covered 190 | Software with a work governed by one or more Secondary Licenses, and the 191 | Covered Software is not Incompatible With Secondary Licenses, this 192 | License permits You to additionally distribute such Covered Software 193 | under the terms of such Secondary License(s), so that the recipient of 194 | the Larger Work may, at their option, further distribute the Covered 195 | Software under the terms of either this License or such Secondary 196 | License(s). 197 | 198 | 3.4. Notices 199 | 200 | You may not remove or alter the substance of any license notices 201 | (including copyright notices, patent notices, disclaimers of warranty, 202 | or limitations of liability) contained within the Source Code Form of 203 | the Covered Software, except that You may alter any license notices to 204 | the extent required to remedy known factual inaccuracies. 205 | 206 | 3.5. Application of Additional Terms 207 | 208 | You may choose to offer, and to charge a fee for, warranty, support, 209 | indemnity or liability obligations to one or more recipients of Covered 210 | Software. However, You may do so only on Your own behalf, and not on 211 | behalf of any Contributor. You must make it absolutely clear that any 212 | such warranty, support, indemnity, or liability obligation is offered by 213 | You alone, and You hereby agree to indemnify every Contributor for any 214 | liability incurred by such Contributor as a result of warranty, support, 215 | indemnity or liability terms You offer. You may include additional 216 | disclaimers of warranty and limitations of liability specific to any 217 | jurisdiction. 218 | 219 | 4. Inability to Comply Due to Statute or Regulation 220 | --------------------------------------------------- 221 | 222 | If it is impossible for You to comply with any of the terms of this 223 | License with respect to some or all of the Covered Software due to 224 | statute, judicial order, or regulation then You must: (a) comply with 225 | the terms of this License to the maximum extent possible; and (b) 226 | describe the limitations and the code they affect. Such description must 227 | be placed in a text file included with all distributions of the Covered 228 | Software under this License. Except to the extent prohibited by statute 229 | or regulation, such description must be sufficiently detailed for a 230 | recipient of ordinary skill to be able to understand it. 231 | 232 | 5. Termination 233 | -------------- 234 | 235 | 5.1. The rights granted under this License will terminate automatically 236 | if You fail to comply with any of its terms. However, if You become 237 | compliant, then the rights granted under this License from a particular 238 | Contributor are reinstated (a) provisionally, unless and until such 239 | Contributor explicitly and finally terminates Your grants, and (b) on an 240 | ongoing basis, if such Contributor fails to notify You of the 241 | non-compliance by some reasonable means prior to 60 days after You have 242 | come back into compliance. Moreover, Your grants from a particular 243 | Contributor are reinstated on an ongoing basis if such Contributor 244 | notifies You of the non-compliance by some reasonable means, this is the 245 | first time You have received notice of non-compliance with this License 246 | from such Contributor, and You become compliant prior to 30 days after 247 | Your receipt of the notice. 248 | 249 | 5.2. If You initiate litigation against any entity by asserting a patent 250 | infringement claim (excluding declaratory judgment actions, 251 | counter-claims, and cross-claims) alleging that a Contributor Version 252 | directly or indirectly infringes any patent, then the rights granted to 253 | You by any and all Contributors for the Covered Software under Section 254 | 2.1 of this License shall terminate. 255 | 256 | 5.3. In the event of termination under Sections 5.1 or 5.2 above, all 257 | end user license agreements (excluding distributors and resellers) which 258 | have been validly granted by You or Your distributors under this License 259 | prior to termination shall survive termination. 260 | 261 | ************************************************************************ 262 | * * 263 | * 6. Disclaimer of Warranty * 264 | * ------------------------- * 265 | * * 266 | * Covered Software is provided under this License on an "as is" * 267 | * basis, without warranty of any kind, either expressed, implied, or * 268 | * statutory, including, without limitation, warranties that the * 269 | * Covered Software is free of defects, merchantable, fit for a * 270 | * particular purpose or non-infringing. The entire risk as to the * 271 | * quality and performance of the Covered Software is with You. * 272 | * Should any Covered Software prove defective in any respect, You * 273 | * (not any Contributor) assume the cost of any necessary servicing, * 274 | * repair, or correction. This disclaimer of warranty constitutes an * 275 | * essential part of this License. No use of any Covered Software is * 276 | * authorized under this License except under this disclaimer. * 277 | * * 278 | ************************************************************************ 279 | 280 | ************************************************************************ 281 | * * 282 | * 7. Limitation of Liability * 283 | * -------------------------- * 284 | * * 285 | * Under no circumstances and under no legal theory, whether tort * 286 | * (including negligence), contract, or otherwise, shall any * 287 | * Contributor, or anyone who distributes Covered Software as * 288 | * permitted above, be liable to You for any direct, indirect, * 289 | * special, incidental, or consequential damages of any character * 290 | * including, without limitation, damages for lost profits, loss of * 291 | * goodwill, work stoppage, computer failure or malfunction, or any * 292 | * and all other commercial damages or losses, even if such party * 293 | * shall have been informed of the possibility of such damages. This * 294 | * limitation of liability shall not apply to liability for death or * 295 | * personal injury resulting from such party's negligence to the * 296 | * extent applicable law prohibits such limitation. Some * 297 | * jurisdictions do not allow the exclusion or limitation of * 298 | * incidental or consequential damages, so this exclusion and * 299 | * limitation may not apply to You. * 300 | * * 301 | ************************************************************************ 302 | 303 | 8. Litigation 304 | ------------- 305 | 306 | Any litigation relating to this License may be brought only in the 307 | courts of a jurisdiction where the defendant maintains its principal 308 | place of business and such litigation shall be governed by laws of that 309 | jurisdiction, without reference to its conflict-of-law provisions. 310 | Nothing in this Section shall prevent a party's ability to bring 311 | cross-claims or counter-claims. 312 | 313 | 9. Miscellaneous 314 | ---------------- 315 | 316 | This License represents the complete agreement concerning the subject 317 | matter hereof. If any provision of this License is held to be 318 | unenforceable, such provision shall be reformed only to the extent 319 | necessary to make it enforceable. Any law or regulation which provides 320 | that the language of a contract shall be construed against the drafter 321 | shall not be used to construe this License against a Contributor. 322 | 323 | 10. Versions of the License 324 | --------------------------- 325 | 326 | 10.1. New Versions 327 | 328 | Mozilla Foundation is the license steward. Except as provided in Section 329 | 10.3, no one other than the license steward has the right to modify or 330 | publish new versions of this License. Each version will be given a 331 | distinguishing version number. 332 | 333 | 10.2. Effect of New Versions 334 | 335 | You may distribute the Covered Software under the terms of the version 336 | of the License under which You originally received the Covered Software, 337 | or under the terms of any subsequent version published by the license 338 | steward. 339 | 340 | 10.3. Modified Versions 341 | 342 | If you create software not governed by this License, and you want to 343 | create a new license for such software, you may create and use a 344 | modified version of this License if you rename the license and remove 345 | any references to the name of the license steward (except to note that 346 | such modified license differs from this License). 347 | 348 | 10.4. Distributing Source Code Form that is Incompatible With Secondary 349 | Licenses 350 | 351 | If You choose to distribute Source Code Form that is Incompatible With 352 | Secondary Licenses under the terms of this version of the License, the 353 | notice described in Exhibit B of this License must be attached. 354 | 355 | Exhibit A - Source Code Form License Notice 356 | ------------------------------------------- 357 | 358 | This Source Code Form is subject to the terms of the Mozilla Public 359 | License, v. 2.0. If a copy of the MPL was not distributed with this 360 | file, You can obtain one at http://mozilla.org/MPL/2.0/. 361 | 362 | If it is not possible or desirable to put the notice in a particular 363 | file, then You may include the notice in a location (such as a LICENSE 364 | file in a relevant directory) where a recipient would be likely to look 365 | for such a notice. 366 | 367 | You may add additional accurate notices of copyright ownership. 368 | 369 | Exhibit B - "Incompatible With Secondary Licenses" Notice 370 | --------------------------------------------------------- 371 | 372 | This Source Code Form is "Incompatible With Secondary Licenses", as 373 | defined by the Mozilla Public License, v. 2.0. 374 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

Running Changelog Generator allows you to

2 | 7 | 8 |

Before you begin

9 |
    10 |
  1. Download and install Python3 : https://www.python.org/downloads/

  2. 11 |
  3. If you haven’t already set up a ‘Development’ directory for github so you can clone repositories, 12 | 13 | - Create a Development directory 14 | - Open terminal, type mkdir Development

  4. 15 | _**This document assumes this is where you create this directory. You will need to adjust accordingly if you create this directory elsewhere.**_ 16 |
17 | 18 | 19 |

First time stuff - getting set up

20 |
    21 |
  1. Open Terminal and navigate to your Development directory.

  2. 22 |
  3. Type: git clone git@github.com:brave/qa-resources.git

  4. 23 |
  5. Press Enter/Return. You have now cloned the qa-resources repo onto your machine.

  6. 24 |
  7. Next, you’ll need to install the pygithub package. This gives you the shared code needed to use GitHub’s public api. 25 | 26 | - Open a Terminal and type: pip3 install PyGithub Then select Enter/Return.

    27 | - FYI - You can get information on this pygithub package here: http://pygithub.readthedocs.io/en/latest/introduction.html
    and the main library of packages can be found here: https://pypi.python.org/pypi

  8. 28 |
  9. In the qa-resources folder, create a file called github.secret. To do this in your Terminal session change directory to qa-resources if you are not already inside the directory. Then type touch github.secret and select Enter/Return.

  10. 29 |
  11. Next, you have to create a github key. 30 | 31 | - Login to your github account and navigate to https://github.com/settings/token

    32 | - Select **`Tokens (Classic)`**

    33 | - Click on **`Generate new token`** button.

    34 | - Give the token a meaningful name and select **`gist`**, **`repo`**, **`workflow`** checkboxes below for your token.

    35 | - Select **`Generate token`** button. Your token is now generated, it looks similar to an SHA. Copy the token. Do not exit this page yet.

  12. 36 |
  13. Add this token to your github.secret file. 37 | 38 | - To do this, in your Terminal session change directory to qa-resources if you are not already inside the directory.

    39 | - Then type vi github.secret and select Enter/Return.

    40 | - Since you’ve already copied your token, type i and paste your token. Then hit the Esc key.

    41 | - Now type :wq to save and exit the file.

    42 | - If you want to verify that the token was saved correctly, you can type cat github.secret and your token will display.

  14. 43 |
44 | 45 |

Running the Changelog Generator

46 |
    47 |
  1. Open a Terminal session.

  2. 48 |
  3. Change directory to where you have qa-resources.

  4. 49 |
  5. Determine what product you want to run the changelog-generator for (browser-laptop, Android, iOS) and if you want to create issues in github or just see the output in the terminal. 50 | 51 | - For simulating creation of test runs 52 | 53 | - In the terminal type python3 brave_testrun_generator.py --test true and select Enter/Return. 54 | - Follow options on screen to simulate generating test runs. It will just displays the output in the terminal and does NOT create GitHub issues. 55 | 56 | - For Tor/IPFS: 57 | 58 | - Ensure milestones are created before running the test run generator. 59 | - Selecting the number option won't generate test runs for Tor/IPFS, need to type in `Tor/IPFS` respectively. 60 | 61 |

  6. 62 |
63 | 64 |

Format of terminal output

65 |

General format of the output in the terminal is as follows. Enter the number for which you want to generate test runs

66 | 67 | ``` 68 | 69 | Rate Limit: 5000 70 | Rate Remaining: some number 71 | 72 | ########################################################################################################################## 73 | 74 | For Desktop or Android minor CR bump only use the basic checks selection to generate testruns 75 | 76 | Current open milestones for Desktop/Android 77 | 1. X.XX.x - Release 78 | 2. X.XX.x - Beta 79 | 3. X.XX.x - Nightly 80 | 81 | Current open milestones for iOS 82 | 1. X.XX 83 | 2. X.XX 84 | 3. X.XX 85 | 4. icebox 86 | 87 | NOTE: 88 | 89 | For Tor Release make sure you type "Tor" or "tor" instead of the number 90 | 91 | For IPFS Release make sure you type "IPFS/KUBO " or "ipfs/kubo" instead of the number 92 | ########################################################################################################################## 93 | 94 | Create test runs for: 95 | 96 | 1. Desktop Release (Full manual pass) 97 | 2. Desktop Release (Basic checks for hotfix/minor Chromium bump) 98 | 3. Android Release (Full manual pass) 99 | 4. Android Release (Basic checks for hotfix/minor Chromium bump) 100 | 5. iOS Release 101 | 6. Crypto Wallet - Desktop 102 | 7. Crypto Wallet - Android 103 | 8. Crypto Wallet - iOS 104 | 9. Tor Release 105 | 10. IPFS Release 106 | 107 | Choose the platform for which you want to generate the test run: 108 | ``` 109 | 110 |

Misc Notes

111 | 112 | - To get updates to the changelog-generator you can open a terminal and navigate to the /Development/qa-resources folder and type: git pull 113 | - Be sure you never add your github.secret file to any git commits you do. 114 | - If you uninstall Python3 for any reason, any packages you install (like PyGithub) will also be uninstalled, so you will need to install them again. 115 | 116 | -------------------------------------------------------------------------------- /WikiTemplate/Android/wikitemplate-android.md: -------------------------------------------------------------------------------- 1 | 2 | ## Installer 3 | 4 | - [ ] Verify that the installer is close to the size of the last release 5 | - [ ] Verify that the Brave version is in About and make sure it is EXACTLY as expected 6 | 7 | ## Startup 8 | 9 | - [ ] Verify that Brave is only contacting `*.brave.com` endpoints on first launch using either `Charles Proxy`, `Fiddler` or `Wireshark` (or a similar application) 10 | - [ ] Verify that opening a NTP doesn't trigger any outbound connections related to widgets without user interaction 11 | 12 | ## Visual look 13 | 14 | - [ ] Verify that thereafter every merge: 15 | - [ ] No Chrome/Chromium words appear on `brave://version` 16 | - [ ] No Chrome/Chromium words appear on normal or private tabs 17 | - [ ] No Chrome/Chromium words appear in site settings for `Location` / `Camera` / `Microphone` / `Augmented Reality` 18 | - [ ] No Chrome/Chromium icons are shown in normal or private tabs 19 | 20 | ## Custom tabs 21 | 22 | - [ ] Verify that Brave handles links from Gmail, Slack 23 | - [ ] Verify that custom tabs work even with sync enabled/disabled 24 | 25 | ## Tab Groups 26 | 27 | - [ ] Verify that tab-group is disabled by default 28 | - [ ] Verify that tab-group is not reverted back to the default setting when changing it and then restarting the browser 29 | 30 | ## Developer Tools 31 | 32 | - [ ] Verify that you can inspect sub-links via dev tools 33 | 34 | ## Clear Data 35 | 36 | - [ ] Verify that Clear Data on exit works as intended 37 | 38 | ## Settings and Bottom bar 39 | 40 | - [ ] Verify that changing default settings are retained and don't cause the browser to crash 41 | - [ ] Verify that bottom bar buttons (Home/Bookmark/Search/Tabs) work as expected 42 | - [ ] Verify that items in the hamburger menu/share menu to ensure nothing unexpected has been added 43 | 44 | ## Unstoppable Domains, ENS and SNS 45 | 46 | - [ ] Verify that settings for Unstoppable Domains, ENS and SNS show up under Brave Shields & Privacy settings 47 | 48 | ## Downloads 49 | 50 | - [ ] Verify that downloading a file works and that all actions on the download item work. 51 | - [ ] Verify that PDF is downloaded over HTTPS at `https://basicattentiontoken.org/BasicAttentionTokenWhitePaper-4.pdf` 52 | - [ ] Verify that PDF is downloaded over HTTP at `http://www.pdf995.com/samples/pdf.pdf` 53 | 54 | ## Bravery settings 55 | 56 | - [ ] Verify that HTTPS Everywhere works by loading `http://https-everywhere.badssl.com/` 57 | - [ ] Verify that turning HTTPS Everywhere off and shields off both disable the redirect to `https://https-everywhere.badssl.com/` 58 | - [ ] Verify that toggling to blocking and allow ads works as expected 59 | - [ ] Verify that clicking through a cert error in `https://badssl.com/` works 60 | - [ ] Verify that Safe Browsing protection is enabled in `https://testsafebrowsing.appspot.com` 61 | - [ ] Verify that nothing should load by visiting `https://twitter.com/` and then turning on script blocking. Allow it from the script blocking UI in the URL bar and it should work. 62 | - [ ] Verify that default Bravery settings take effect on pages with no site settings 63 | - [ ] Verify that 3rd party storage results are blank at `https://jsfiddle.net/7ke9r14a/7/` when 3rd party cookies are blocked 64 | - [ ] Verify that your ISP's DNS resolvers aren't detected and not shown, but only your chosen DoH provider should appear by choosing a DNS provider from the list in Settings | Privacy | Use Secure DNS and loading `https://browserleaks.com/dns`. 65 | - [ ] Verify that results are as expected per each test listed by running all six test configurations on `https://dev-pages.brave.software/storage/ephemeral-storage.html` 66 | ### Fingerprint Tests 67 | - [ ] Verify that 2 blocked items are listed in shields by visiting `https://browserleaks.com/webrtc` 68 | - [ ] Verify that `https://diafygi.github.io/webrtc-ips/` doesn't leak the IP address for each option under `Settings -> Privacy and Security -> WebRTC IP handling policy` 69 | 70 | ### Query Filter 71 | 72 | - [ ] Verify that results are as expected per each test listed by visiting `https://fmarier.github.io/brave-testing/query-filter.html` in a Private window and running the tests as directed 73 | 74 | ## Content Tests 75 | 76 | - [ ] Verify that context menus work in the new X (Twitter) tab by going to `https://brianbondy.com/` and tapping on the Twitter icon on the top right 77 | - [ ] Verify that the password can be saved by going to `https://feedly.com` and signing in to the account. Verify that the saved password is auto-populated when you visit the site again 78 | - [ ] Verify that `https://mixed-script.badssl.com/` shows up as grey not red (no mixed content scripts are run) 79 | 80 | ## Brave Rewards 81 | 82 | - [ ] Verify that none of the reward endpoints are being contacted when a user visits a media creator (`youtube.com`, `reddit.com`, `twitter.com`, `github.com`) and hasn't joined rewards 83 | - [ ] Verify that `rewards.brave.com`, `pcdn.brave.com`, `grant.rewards.brave.com` or `api.rewards.brave.com` are not being contacted 84 | - [ ] Verify that you are able to create a new Rewards profile and you are in the unverified state by default 85 | - [ ] Verify that when you visit a creator in this state the panel shows a prompt to connect a custodian and no BAT information (earnings, balance, etc) is displayed 86 | - [ ] Verify that when you visit `brave://rewards` in this state there are no Auto Contribution, Tipping, or summary panels on this page 87 | - [ ] Verify that you can toggle notification ads off/on from the "Manage Brave Ads" panel on `brave://rewards` 88 | - [ ] Verify that you are able to connect a custodian 89 | - [ ] Verify that the Rewards balance shows the correct BAT and USD value on brave://rewards and panel after you connect 90 | - [ ] Verify that when you tap on the BR panel while on a site, the panel displays site-specific information (site favicon, domain, attention %) 91 | - [ ] Verify that the BR panel shows a message about an unverified creator 92 | - [ ] Verify that the "Send Contribution" button is grayed out on the panel for an unverified creator and the tip banner cannot be accessed 93 | - [ ] Verify that the tip banner shows a message about a creator with a different custodian 94 | - [ ] Verify that you are able to tip a creator who has the same custodian as you 95 | - [ ] Verify that there is no "Disconnect" option once connected to a custodian 96 | - [ ] Verify that you are able to reset rewards 97 | - [ ] Verify that after rewards are reset, you are now in the non-opted in state 98 | - [ ] Verify that you can re-join rewards, the panel and brave://rewards page are now in the unverified state 99 | 100 | ## Brave Ads 101 | 102 | - [ ] Verify that ads are auto-enabled when rewards are enabled for the supported region 103 | - [ ] Verify that ads are only shown when the app is being used 104 | - [ ] Verify that ad notifications are shown based on ads per hour setting 105 | - [ ] Verify that ad notifications stack up in the notification tray 106 | - [ ] Verify that swiping left/right dismisses the ad notification when shown and is not stored in the notification tray 107 | - [ ] Verify that tapping on an ad notification shows the landing page 108 | - [ ] Verify that `view`,`clicked`, `landed` and `dismiss` states are logged based on the action 109 | 110 | ## Sync 111 | 112 | - [ ] Verify that you are able to join the Sync chain by scanning the QR code 113 | - [ ] Verify that you are able to join the Sync chain using code words 114 | - [ ] Verify that you are able to create a Sync chain on the device and add other devices to the chain via QR code/Code words 115 | - [ ] Verify that once the Sync chain is created, `Categories` option is shown in the devices list 116 | - [ ] Verify that only `Bookmarks` is enabled in `Categories` by default 117 | - [ ] Verify that enabling `Sync everything` enables all other switches 118 | - [ ] Verify that existing bookmarks before joining the Sync chain also get synced to all devices on the Sync chain 119 | - [ ] Verify that `Autofill` data is synced to all devices when enabled 120 | - [ ] Verify that `History` is synced to all devices 121 | - [ ] Verify that `Open tab` from other devices shows up under history below the device name 122 | - [ ] Verify that `Password` is synced to all devices 123 | - [ ] Verify that `Settings` syncs site settings on all devices 124 | - [ ] Verify that sync works on an upgrade profile and new bookmarks added post-upgrade syncs across devices on the chain 125 | - [ ] Verify that adding a bookmark on a custom tab gets synced across all devices in the chain 126 | - [ ] Verify that you are able to create a standalone Sync chain with one device 127 | - [ ] Verify that `Remove this device` shows a confirmation alert before removing the sync chain on the device 128 | 129 | ## Top sites view 130 | 131 | - [ ] Verify that you are able to Long-press on Top sites to get to deletion mode, and delete a Top site (note this will stop that site from showing up again on Top sites, so you may not want to do this a site you want to keep there) 132 | 133 | ## Session storage 134 | 135 | - [ ] Verify that tabs restore when closed, including active tab 136 | 137 | ## Upgrade from previous version 138 | 139 | Examples of pre-requisites before upgrading from the previous version to the build being tested: 140 | 141 | * visit several websites so `Top Tiles` under New Tab Page gets updated/populated 142 | * add several websites to the Android home screen via `Add to Home screen` (from the hamburger/setting menu) 143 | * add several bookmarks including folders 144 | * change/update several settings (Example: default search engine, adding a custom home page, changing site settings, changing several privacy settings, etc..) 145 | * create/enable a Brave Wallet (or restore if an individual who's going through the upgrade has one available) 146 | * enable Brave News and add/remove several sources 147 | * change the default shield settings on various websites (Example: enable script blocking/change FP/Ad blocking to strict, disable shields) 148 | * Login into several websites and leave them opened 149 | * Login into several websites and close the tabs so they're not opened when upgrading 150 | * Login into a website and leave it as the active tab while upgrading 151 | * enable/create a sync chain with several devices 152 | 153 | **`Upgrade Cases`** 154 | 155 | - [ ] Verify that `brave://version` displays both the correct Brave version and the expected Chromium version 156 | - [ ] Verify that bookmarks and folders from the previous release have been retained/can be loaded without issues 157 | - [ ] Verify that previously opened tabs are retained and can be lazy loaded without issues 158 | - [ ] Verify that websites that have been logged into and were opened while upgrading are still logged in (ensure cookies are not cleared/lost) 159 | - [ ] Verify that websites that have been logged into but weren't open when upgrading are still logged in when loading in a new tab (ensure cookies are not cleared/lost) 160 | - [ ] Verify that the correct website loads as the active tab (as per the pre-requisites, this tab should be logged into a website) 161 | - [ ] Verify that the Shields settings from the previous versions are retained on each website 162 | - [ ] Verify that saved passwords are being displayed under `Settings` -> `Passwords` and can be auto-filled without issues 163 | - [ ] Verify that the Sync chain is preserved and that syncing still works across the devices that have been added 164 | - [ ] Verify that sharing links/tabs using `Send to your device` works as expected 165 | - [ ] Verify that Brave News is still enabled and source changes from the previous release are retained 166 | - [ ] Verify that the various setting changes via `Settings` are retained (Example: enable script blocking/change FP/Ad blocking to strict, disable shields) 167 | - [ ] Verify that Unstoppable Domains, ENS and SNS settings are retained from the previous version 168 | - [ ] Verify that `History` is retained from the previous version 169 | - [ ] Verify that the website shortcuts added via `Add to Home screen` are still visible on the Android home screen and tapping on icons loads the appropriate webpage 170 | - [ ] Verify that the `Tab Group` setting doesn't reset/change after upgrading 171 | - [ ] Verify that `Clear data on exit` is retained from the previous version 172 | - [ ] Rewards 173 | - [ ] Verify that BAT balance is retained 174 | - [ ] Verify that both Tips and Monthly Contributions are retained 175 | - [ ] Verify that the Summary panel transactions list is retained 176 | - [ ] Ads 177 | - [ ] Verify that both `Estimated pending rewards` & `Ad notifications received this month` are retained 178 | - [ ] Verify that changes to Ads settings are retained 179 | - [ ] Verify that Ads are not being enabled when upgrading to a new version if they were disabled 180 | - [ ] Verify that Ads are not being disabled when upgrading to a new version if they were enabled 181 | -------------------------------------------------------------------------------- /WikiTemplate/Android/wikitemplate-minorCRbumpAndroid.md: -------------------------------------------------------------------------------- 1 | ## Installer 2 | 3 | - [ ] Check that installer is close to the size of the last release 4 | - [ ] Check the Brave version in About and make sure it is EXACTLY as expected 5 | 6 | ## Custom tabs 7 | 8 | - [ ] Make sure Brave handles links from Gmail, Slack 9 | - [ ] Make sure Brave works as custom tabs provide with Chrome browser 10 | - [ ] Ensure custom tabs work even with sync enabled/disabled 11 | 12 | ## Settings and Bottom bar 13 | 14 | - [ ] Verify changing default settings are retained and don't cause the browser to crash 15 | - [ ] Verify bottom bar buttons (Home/Bookmark/Search/Tabs) work as expected 16 | 17 | ### Rewards 18 | 19 | - [ ] Verify that you are able to successfully join Rewards on a fresh profile 20 | 21 | ## Upgrade 22 | 23 | Pre-Requisite: Visit several websites so Top Tiles under New Tab Page get updated and add several sites via `Add to Home screen` (from 3 dots menu) using a previous build/installation before upgrading. 24 | 25 | - [ ] Make sure that data from the last version appears in the new version OK 26 | - [ ] Ensure that `brave://version` lists the expected Brave & Chromium versions 27 | - [ ] With data from the last version, verify that 28 | - [ ] Bookmarks are preserved (Folders/Sites) 29 | - [ ] Cookies are preserved 30 | - [ ] Per site shield settings are preserved 31 | - [ ] Opened tabs can be reloaded 32 | - [ ] Stored passwords are preserved 33 | - [ ] Sync chain created in previous version is retained 34 | - [ ] Setting changes are preserved (Default SE, Shield settings, Homepage etc..) 35 | - [ ] Top Tiles under New Tab Page are preserved 36 | - [ ] Home screen shortcuts are preserved 37 | - [ ] Rewards 38 | - [ ] BAT balance is retained 39 | - [ ] Auto-contribute list is retained 40 | - [ ] Both Tips and Monthly Contributions are retained 41 | - [ ] Summary panel transactions list is retained 42 | - [ ] Changes to rewards settings are retained 43 | - [ ] Ads 44 | - [ ] Both `Estimated pending rewards` & `Ad notifications received this month` are retained 45 | - [ ] Changes to ads settings are retained 46 | - [ ] Ensure that ads are not being enabled when upgrading to a new version if they were disabled 47 | - [ ] Ensure that ads are not disabled when upgrading to a new version if they were enabled 48 | -------------------------------------------------------------------------------- /WikiTemplate/Crypto/wikitemplate-cryptoAndroid.md: -------------------------------------------------------------------------------- 1 | 2 | ## Onboarding 3 | 4 | - [ ] Verify able to create a wallet by following onboarding 5 | - [ ] Verify not able to take screenshots during onboarding screens 6 | - [ ] Verify able to back up wallet seed phrase during onboarding 7 | - [ ] Verify able to skip back up wallet seed screen to complete onboarding 8 | - [ ] Verify onboarding is shown when trying to interact with Dapp without creating wallet 9 | 10 | ## Panel 11 | 12 | - [ ] Verify panel is only shown in URL when a Dapp is trying to interact 13 | - [ ] Verify able to change default network from panel 14 | - [ ] Verify able to change accounts from panel 15 | - [ ] Verify notification dot is shown on wallet icon when an action is pending for Wallet 16 | 17 | ## Ethereum 18 | 19 | - [ ] Verify Ethereum account is created as soon as onboarding is completed 20 | - [ ] Verify able to create an Ethereum account can be created from accounts tab 21 | - [ ] Verify able to create an Ethereum account can be created from accounts list screen 22 | - [ ] Verify able to import an Ethereum account via Private Key/JSON file 23 | - [ ] Verify able to submit a Buy ETH transaction 24 | - [ ] Verify able to submit a Send ETH transaction 25 | - [ ] Verify able to perform Swap ETH transaction 26 | - [ ] Verify send transactions using different OS locale. (Refer [brave/brave-browser#24909](https://github.com/brave/brave-browser/issues/24909) for more info) 27 | 28 | ## Solana 29 | 30 | - [ ] Verify able to create a Solana account when Solana Mainnet Beta is selected from network picker 31 | - [ ] Verify able to create a Solana account from accounts tab 32 | - [ ] Verify able to create a Solana account can be created from accounts list screen 33 | - [ ] Verify able to send tokens from one Solana account to another 34 | - [ ] Verify able to submit a SOL transaction 35 | 36 | ## Network Settings 37 | 38 | - [ ] Verify able to add a custom network via Settings 39 | - [ ] Verify able to change active network to a custom network via portfolio 40 | 41 | ## Custom Tokens 42 | 43 | - [ ] Verify able to manually add a custom token 44 | - [ ] Verify able to manually add ERC721 tokens 45 | - [ ] Verify able to add custom tokens via webpage (Coingecko/CoinMarketCap) 46 | 47 | ## Dapp Support (Ethereum) 48 | 49 | - [ ] Verify able to connect to a Dapp 50 | - [ ] Verify when a Dapp is trying to interact a toast notification is shown when wallet is locked/wallet icon is not yet shown in URL 51 | - [ ] Verify clicking on the Dapp interaction notification, opens the Panel for Dapp interaction 52 | - [ ] Verify able to connect multiple accounts to a Dapp 53 | - [ ] Verify able to connect/disconnect to Dapp from Panel 54 | - [ ] Verify able to approve/reject Dapp request to change network via panel 55 | - [ ] Verify able to approve/cancel transaction request via panel when interacting with a Dapp 56 | - [ ] Verify able to add a custom network via panel when connected to a Dapp 57 | - [ ] Verify able to switch networks via panel when a Dapp requests network change 58 | - [ ] Verify able to sign messages from Dapp via Wallet panel 59 | - [ ] Verify able to get public encryption key from Dapp via panel 60 | - [ ] Verify able to view decrypt message form Dapp on panel 61 | 62 | ## Settings 63 | 64 | - [ ] Verify able to set custom timer on auto-lock 65 | - [ ] Verify able to add/remove a custom network 66 | - [ ] Verify able to set added custom network as default via settings 67 | - [ ] Verfiy able to set/disable Web3 Notification 68 | - [ ] Verify when Web3 Notification settings is disabled, there is no notification dot shown on wallet during Dapp interaction 69 | - [ ] Verify able to clear transactions and nonce information 70 | - [ ] Verify able to reset wallet 71 | - [ ] Verify recreating wallet after reset creates a new account -------------------------------------------------------------------------------- /WikiTemplate/Crypto/wikitemplate-cryptoDesktop.md: -------------------------------------------------------------------------------- 1 | 2 | ## Onboarding 3 | 4 | - [ ] Verify loading `brave://wallet` on a clean profile shows onboarding flow 5 | - [ ] Verify you are able to complete the onboarding flow to Ethereum create wallet by default 6 | - [ ] Verify you are able to complete the backup seed phrase during onboarding itself 7 | - [ ] Verify you can skip the onboarding from backup wallet screen and still create a wallet 8 | - [ ] Verify when a Dapp interacts without creating wallet opens a new tab and shows onboarding 9 | 10 | ## Importing Wallet 11 | 12 | - [ ] Verify with MetaMask extension installed and wallet created, visiting `brave://wallet/crypto/onboarding/import-or-restore` shows option to import account from MetaMask during onboarding 13 | - [ ] Verify error message is shown when trying to use same password as MetaMask and it doesn't meet Brave Wallet's password criteria 14 | - [ ] Verify able to successfully import MetaMask wallet into Brave Wallet 15 | - [ ] Verify with Crypto Wallet Extension installed and wallet created, visiting `brave://wallet/crypto/onboarding/import-or-restore` shows option to import account from old Crypto Wallet Extension 16 | - [ ] Verify error message is shown when trying to use same password as Crypto Wallet Extension and it doesn't meet Brave Wallet's password criteria 17 | - [ ] Verify able to successfully import Crypto Wallet Extension with 12-seed into Brave Wallet 18 | - [ ] Verify able to successfully import Crypto Wallet Extension with 24-seed word into Brave Wallet 19 | 20 | ## Panel 21 | 22 | - [ ] Verify when wallet is not created opening the wallet panel shows `Learn More` message. Clicking on it opens `brave://wallet` in a new tab 23 | - [ ] Verify when wallet is created, opening the panel shows default account and selected network and account balance 24 | - [ ] Verify Buy/Send/Swap buttons are available and loads corresponding screens to perform action 25 | - [ ] Verify transaction history button is shown and lists recent transactions for selected network when clicked 26 | - [ ] Verify changing network in panel updates the corresponding account in panel and in portfolio page 27 | - [ ] Verify changing account in panel updates the corresponding network in panel and in portfolio page 28 | - [ ] Verify when a Dapp is connected to wallet account, panel shows a `Connected` state notification 29 | - [ ] Verify when a Dapp connection is revoked, panel shows a `Disconnected` state notification 30 | - [ ] Verify selecting `Connected Sites` from panel menu loads `brave://settings/content/` for Ethereum/Solana based on selected account 31 | - [ ] Verify selecting `View on Block explorer` from panel loads the corresponding account's details on the network block explorer 32 | - [ ] Verify selecting `Help Center` opens a new tab and loads `https://support.brave.com/hc/en-us/articles/4415497656461-Brave-Walllet-FAQ` 33 | - [ ] Verify you are able to lock the wallet from panel menu 34 | - [ ] Verify clicking on the expand button on the top-left of panel loads the wallet page in a new tab 35 | 36 | ## Portfolio & Accounts 37 | 38 | - [ ] Verify after creating a wallet it loads portfolio screen by default 39 | - [ ] Verify portfolio page shows balance of all accounts 40 | - [ ] Verify able to show/hide balance on portfolio screen 41 | - [ ] Verify able to search for token in portfolio screen 42 | - [ ] Verify able to filter assets list by specific network via the network dropdown 43 | - [ ] Verify able to sort NFT's and Assets list by balance amount 44 | - [ ] Verify able to add or remove assets from view via `Visible assets` button 45 | - [ ] Verify able to add a new custom asset for specific network 46 | - [ ] Verify able to add hide/remove custom asset via `Visible assets` list 47 | - [ ] Verify able to create a new primary account for Ethereum/Solana/Filecoin via `Create Account` in accounts tab 48 | - [ ] Verify able to import Ethereum/Solana/Filecoin accounts via `Import` option 49 | - [ ] Verify imported accounts are listed under `Secondary Accounts` 50 | - [ ] Verify able to import Ethereum/Solana/Filecoin accounts via `Import from hardware wallet` 51 | - [ ] Verify imported hardware wallet accounts are listed under `Secondary Accounts` 52 | - [ ] Verify Wallet backup message is shown on both portfolio and accounts tab if skipped during onboarding 53 | - [ ] Verify Brave Wallet is not default message is shown when MetaMask is installed and `Brave Wallet (Prefer extensions)` is set as default wallet provider 54 | 55 | ## Ethereum 56 | 57 | - [ ] Verify when a new wallet is created Ethereum Account is created but not set as default 58 | - [ ] Verify for a newly created Ethereum wallet, `ETH` and `BAT` tokens are added by default on portfolio screen 59 | - [ ] Verify the account address is same for Ethereum Mainnet and other EVM's 60 | - [ ] Verify able to add a new Ethereum account via the Accounts tab 61 | - [ ] Verify able to import an Ethereum account via `Private Key` or `JSON file` under the import section 62 | - [ ] Verify able to import Ethereum account via hardware keys 63 | - [ ] Verify able to resolve UD/ENS Domains on `Send To` tab 64 | 65 | ## Solana 66 | 67 | - [ ] Verify when a new wallet is created Solana Account is created and set as default 68 | - [ ] Verify when `Solana Mainnet Beta` is selected in network dropdown in panel or in widget, it prompts to create a new Solana account 69 | - [ ] Verify selecting `Yes` in the create Solana account modal creates a new Solana account 70 | - [ ] Verify selecting `No` in the create Solana account doesn't create a new Solana account 71 | - [ ] Verify able to add a new Solana account via the Accounts tab 72 | - [ ] Verify able to import an Solana account via `Private Key` under the import section 73 | - [ ] Verify able to import Solana account via hardware keys 74 | 75 | ## Filecoin 76 | 77 | - [ ] Verify when a new wallet is created there is no Filecoin account created by default 78 | - [ ] Verify when `Filecoin` is selected in network dropdown in panel or in widget, it prompts to create a new Filecoin account 79 | - [ ] Verify selecting `Yes` in the create Filecoin account modal creates a new Filecoin account 80 | - [ ] Verify selecting `No` in the create Filecoin account modal doesn't create a new Filecoin account 81 | - [ ] Verify able to add a new Filecoin account via the Accounts tab 82 | - [ ] Verify able to import an Filecoin account via `Private Key` under the import section 83 | - [ ] Verify able to import Filecoin account via hardware keys 84 | 85 | ## Hardware 86 | 87 | - [ ] Verify able to connect Ledger and import Ethereum accounts 88 | - [ ] Verify able to connect Ledger and import Solana accounts 89 | - [ ] Verify able to connect Ledger and import Filecoin accounts 90 | - [ ] Verify able to connect Trezor and import Ethereum accounts 91 | 92 | ## Custom Tokens 93 | 94 | - [ ] Verify able to manually add a ERC721 token 95 | - [ ] Verify able to manually add a custom token for Ethereum/EVM network 96 | - [ ] Verify able to manually add a custom token for Solana network 97 | - [ ] Verify able to add a custom token via webpage (Coingecko/Coinmarketcap) 98 | 99 | ## Wallet Settings 100 | 101 | - [ ] Verify Default Ethereum Wallet dropdown is set to `Brave Wallet` as default 102 | - [ ] Verify Default Solana Wallet dropdown is set to `Brave Wallet (prefer extensions)` as default 103 | - [ ] Verify Default Ethereum/Solana Wallet allows to set Brave Wallet as default 104 | - [ ] Verify Default Ethereum/Solana Wallet allows to set it to None 105 | - [ ] Verify with Crypto Wallets Extension flag enabled `Crypto Wallet (deprecated)` is only shown for Default Ethereum Wallet 106 | - [ ] Verify able to change default base currency (USD -> Other) 107 | - [ ] Verify able to change default base cryptocurrency from BTC to other (ETH/LTC/BCH etc) 108 | - [ ] Verify able to update default wallet lock time and works as expected 109 | - [ ] Verify able to clear wallet transaction & nonce information 110 | - [ ] Verify able to add custom network 111 | - [ ] Verify able to set a network as active network from settings 112 | - [ ] Verify able to delete added custom network 113 | - [ ] Verify able to edit pre-loaded default networks 114 | - [ ] Verify able to enable/disable test networks 115 | - [ ] Verify able to reset default networks when edited 116 | 117 | ## Dapp Support (Ethereum & Solana) 118 | 119 | - [ ] Verify able to connect to an Ethereum Dapp 120 | - [ ] Verify after connecting to an Ethereum Dapp the connected state is saved in `brave://settings/content/ethereum` 121 | - [ ] Verify able to connect to an Solana Dapp 122 | - [ ] Verify after connecting to an Solana Dapp the connected state is saved in `brave://settings/content/ethereum` 123 | - [ ] Verify able to connect multiple accounts to Dapp (Both Ethereum & Solana) 124 | - [ ] Verify able to submit transactions when wallet is connected to Dapp (Both Ethereum & Solana) 125 | - [ ] Verify able to add a custom token from Dapp 126 | - [ ] Verify able to Sign Transactions for both Ethereum & Solana accounts 127 | - [ ] Verify able to add a custom network via Dapp 128 | - [ ] Verify network switch prompt is shown when adding a new network or changing network in Dapp 129 | 130 | ## Restore & Reset 131 | 132 | - [ ] Verify able to restore a wallet using seed words from the onboarding screen (No wallet created) 133 | - [ ] Verify able to restore a wallet using seed words from wallet lock screen (Wallet created & Locked) 134 | - [ ] Verify when a wallet is restored, there is no "Backup wallet" message is shown 135 | - [ ] Verify when a wallet is restored, all the accounts that have a transaction are restored 136 | - [ ] Verify when a wallet is restored it restores all Ethereum & Solana accounts that have a send transaction 137 | - [ ] Verify able to reset wallet from `brave://settings/wallet` 138 | - [ ] Verify wallet tab is reloaded when wallet is reset from settings 139 | 140 | ## Transactions 141 | 142 | - [ ] Verify Buy ETH works with different on-ramp providers 143 | - [ ] Verify Buy Solana works with different on-ramp providers 144 | - [ ] Verify Buy Filecoin works 145 | - [ ] Verify able to submit Send ETH transaction 146 | - [ ] Verify able to submit Send SOL transaction 147 | - [ ] Verify able to submit Send FIL transaction 148 | - [ ] Verify able to perform Swap ETH transaction 149 | - [ ] Verify able to perform Swap SOL transaction 150 | - [ ] Verify able to perform Swap on different pre-loaded EVM chains 151 | - [ ] Verify transaction notification is shown for confirmed/error/rejected transactions 152 | - [ ] Verify clicking on the transaction notification opens a new tab and loads the token details to view the current transaction 153 | - [ ] Verify able to submit and approve Ethereum transactions via imported Ethereum account on Ledger 154 | - [ ] Verify able to submit and approve Solana transactions via imported Solana account on Ledger 155 | - [ ] Verify able to submit and approve Filecoin transactions via imported Filecoin account on Ledger 156 | - [ ] Verify able to submit and approve transactions via imported Ethereum account on Trezor 157 | -------------------------------------------------------------------------------- /WikiTemplate/Crypto/wikitemplate-cryptoiOS.md: -------------------------------------------------------------------------------- 1 | 2 | ## Onboarding 3 | 4 | - [ ] Verify able to create a wallet by following onboarding 5 | - [ ] Verify not able to take screenshots during onboarding screens 6 | - [ ] Verify able to back up wallet seed phrase during onboarding 7 | - [ ] Verify able to skip back up wallet seed screen to complete onboarding 8 | - [ ] Verify onboarding is shown when trying to interact with Dapp without creating wallet 9 | 10 | ## Panel 11 | 12 | - [ ] Verify panel is only shown in URL bar when a Dapp is trying to interact 13 | - [ ] Verify able to change default network from panel 14 | - [ ] Verify able to change accounts from panel 15 | - [ ] Verify notification dot is shown on wallet icon when an action is pending for Wallet 16 | 17 | ## Ethereum 18 | 19 | - [ ] Verify Ethereum account is created as soon as onboarding is completed 20 | - [ ] Verify able to create an Ethereum account from accounts tab 21 | - [ ] Verify able to create an Ethereum account from accounts list screen 22 | - [ ] Verify able to import an Ethereum account via Private Key/JSON file 23 | - [ ] Verify able to submit a Buy ETH transaction 24 | - [ ] Verify able to submit a Send ETH transaction 25 | - [ ] Verify able to perform a Swap ETH transaction 26 | 27 | ## Solana 28 | 29 | - [ ] Verify able to create a Solana account when Solana Mainnet Beta is selected from network picker 30 | - [ ] Verify able to create a Solana account from accounts tab 31 | - [ ] Verify able to create a Solana account can be created from accounts list screen 32 | - [ ] Verify able to send tokens from one Solana account to another 33 | - [ ] Verify able to submit a SOL transaction 34 | 35 | ## Network Settings 36 | 37 | - [ ] Verify able to add a custom network via Settings 38 | - [ ] Verify able to change active network to a custom network via portfolio 39 | 40 | ## Custom Tokens 41 | 42 | - [ ] Verify able to manually add a custom token 43 | - [ ] Verify able to manually add ERC721 tokens (Yet to be implmented) 44 | - [ ] Verify able to add custom tokens via webpage (Coingecko/CoinMarketCap) 45 | 46 | ## Dapp Support (Ethereum) 47 | 48 | - [ ] Verify able to connect to a Dapp 49 | - [ ] Verify when a Dapp is trying to interact a toast notification is shown when wallet is locked/wallet icon is not yet shown in URL bar 50 | - [ ] Verify clicking on the Dapp interaction notification, opens the Panel for Dapp interaction 51 | - [ ] Verify able to connect multiple accounts to a Dapp 52 | - [ ] Verify able to connect/disconnect to Dapp from Panel 53 | - [ ] Verify able to approve/reject Dapp request to change network via panel 54 | - [ ] Verify able to approve/cancel transaction request via panel when interacting with a Dapp 55 | - [ ] Verify able to add a custom network via panel when connected to a Dapp 56 | - [ ] Verify able to switch networks via panel when a Dapp requests network change 57 | - [ ] Verify able to sign messages from Dapp via Wallet panel 58 | - [ ] Verify able to get public encryption key from Dapp via panel 59 | - [ ] Verify able to view decrypt message form Dapp on panel 60 | 61 | ## Settings 62 | 63 | - [ ] Verify able to set custom timer on auto-lock 64 | - [ ] Verify able to add/remove a custom network 65 | - [ ] Verify able to set added custom network as default via settings 66 | - [ ] Verfiy able to set/disable Web3 Notification 67 | - [ ] Verify when Web3 Notification settings is disabled, there is no notification dot shown on wallet during Dapp interaction 68 | - [ ] Verify able to clear transactions and nonce information 69 | - [ ] Verify able to reset wallet 70 | - [ ] Verify recreating wallet after reset creates a new account -------------------------------------------------------------------------------- /WikiTemplate/Desktop/Major_CR_Bump/wikitemplate-majorChromiumBumpUpgrades.md: -------------------------------------------------------------------------------- 1 | As per process, QA runs through the following cases to ensure that the major chromium bump that's about to get merged into `master` doesn't regress the `Nightly` channel. Once the major chromium bump is merged into `master`, QA will run through a full manual pass on `Windows` & `Android`. 2 | 3 | ### Startup & Components 4 | 5 | - [ ] Verify that Brave is only contacting `*.brave.com` endpoints on first launch using either `Charles Proxy`, `Fiddler`, `Wireshark` or `LittleSnitch` (or a similar application) 6 | - [ ] Verify that opening a NTP doesn't trigger any outbound connections related to widgets without user interaction 7 | - [ ] Remove the following component folders and ensure that they're being re-downloaded after restarting the browser: 8 | - [ ] `afalakplffnnnlkncjhbmahjfjhmlkal`: `AutoplayWhitelist.dat`, `ExtensionWhitelist.dat`, `ReferrerWhitelist.json` and `Greaselion.json` 9 | - [ ] `CertificateRevocation` 10 | - [ ] `gccbbckogglekeggclmmekihdgdpdgoe`: (Sponsored New Tab Images) 11 | - [ ] `gkboaolpopklhgplhaaiboijnklogmbc`: Brave Ad Block List Catalog 12 | - [ ] `iodkpdagapdfkphljnddpjlldadblomo`: Brave Ad Block Updater 13 | - [ ] `mfddibmblmbccpadfndgakiopmmhebop`: Brave Ad Block List Catalog 14 | - [ ] `Safe Browsing` 15 | - [ ] Restart the browser, load `brave://components`, wait for 8 mins and verify that no component shows any errors 16 | 17 | **Note:** Always double check `brave://components` to make sure there's no errors/missing version numbers 18 | 19 | ### Upgrade 20 | 21 | - [ ] Make sure that data from the last version appears in the new version OK 22 | - [ ] Ensure that `brave://version` lists the expected Brave & Chromium versions 23 | - [ ] With data from the last version, verify that: 24 | - [ ] Bookmarks on the bookmark toolbar and bookmark folders can be opened 25 | - [ ] Cookies are preserved 26 | - [ ] Installed extensions are retained and work correctly 27 | - [ ] Opened tabs can be reloaded 28 | - [ ] Stored passwords are preserved 29 | - [ ] Sync chain created in previous version is retained 30 | - [ ] Social media-blocking buttons changes are retained 31 | - [ ] Custom filters under brave://settings/shields/filters are retained 32 | - [ ] Custom lists under brave://settings/shields/filters are retained 33 | - [ ] Rewards 34 | - [ ] BAT balance is retained 35 | - [ ] Auto-contribute list is retained 36 | - [ ] Both Tips and Monthly Contributions are retained 37 | - [ ] Panel transactions list is retained 38 | - [ ] Changes to rewards settings are retained 39 | - [ ] Ensure that Auto Contribute is not being enabled when upgrading to a new version if AC was disabled 40 | - [ ] Ads 41 | - [ ] Both `Estimated pending rewards` & `Ad notifications received this month` are retained 42 | - [ ] Changes to ads settings are retained 43 | - [ ] Ensure that ads are not being enabled when upgrading to a new version if they were disabled 44 | - [ ] Ensure that ads are not disabled when upgrading to a new version if they were enabled 45 | -------------------------------------------------------------------------------- /WikiTemplate/Desktop/Minor_CR_Bump/wikitemplate-minorCRbump-macOS-arm64.md: -------------------------------------------------------------------------------- 1 | ### Installer 2 | 3 | - [ ] Ensured that the following executables work as expected 4 | - [ ] `Brave-Browser-arm64.dmg` 5 | - [ ] Check executable size, should be `~290mb` 6 | - [ ] Check signature: If OS Run `spctl --assess --verbose` for the installed version and make sure it returns `accepted`. 7 | - [ ] `Brave-Browser-universal.dmg` 8 | - [ ] Check executable size, should be `~500mb` 9 | - [ ] Check signature: If OS Run `spctl --assess --verbose` for the installed version and make sure it returns `accepted`. 10 | - [ ] Visited `brave://version` and ensure the following: 11 | - [ ] `arm64` is being displayed when installing via `arm64` and `universal` binaries on `M1` mac 12 | 13 | ### Widevine 14 | 15 | - [ ] Using `universal` build: 16 | - [ ] Verify `Widevine Notification` is shown when you visit Netflix for the first time 17 | - [ ] Test that you can stream on Netflix on a fresh profile after installing Widevine 18 | - [ ] Using `arm64` build: 19 | - [ ] Verify `Widevine Notification` is shown when you visit Netflix for the first time 20 | - [ ] Test that you can stream on Netflix on a fresh profile after installing Widevine 21 | 22 | #### Components 23 | - [ ] Delete Adblock folder from browser profile and restart browser. Visit `brave://components` and verify `Brave Ad Block Updater` downloads and update the component. Repeat for all Brave components 24 | 25 | #### Upgrade - `Brave-Browser-arm64.dmg` 26 | 27 | - [ ] Make sure that data from the last version appears in the new version OK 28 | - [ ] Ensure that `brave://version` lists the expected Brave & Chromium versions 29 | - [ ] With data from the last version, verify that 30 | - [ ] Bookmarks on the bookmark toolbar and bookmark folders can be opened 31 | - [ ] Cookies are preserved 32 | - [ ] Installed extensions are retained and work correctly 33 | - [ ] Opened tabs can be reloaded 34 | - [ ] Stored passwords are preserved 35 | - [ ] Sync chain created in previous version is retained 36 | - [ ] Social media blocking buttons changes are retained 37 | - [ ] Custom filters under brave://settings/shields/filters are retained 38 | - [ ] Custom lists under brave://settings/shields/filters are retained 39 | - [ ] Rewards 40 | - [ ] BAT balance is retained 41 | - [ ] Auto-contribute list is retained 42 | - [ ] Both Tips and Monthly Contributions are retained 43 | - [ ] Panel transactions list is retained 44 | - [ ] Changes to rewards settings are retained 45 | - [ ] Ensure that Auto Contribute is not being enabled when upgrading to a new version if AC was disabled 46 | - [ ] Ads 47 | - [ ] Both `Estimated pending rewards` & `Ad notifications received this month` are retained 48 | - [ ] Changes to ads settings are retained 49 | - [ ] Ensure that ads are not being enabled when upgrading to a new version if they were disabled 50 | - [ ] Ensure that ads are not disabled when upgrading to a new version if they were enabled 51 | 52 | #### Upgrade - `Brave-Browser-universal.dmg` 53 | 54 | Pre-requisite: Make sure that the previous version is installed using the universal build 55 | - [ ] Make sure that after upgrade, the universal build is upgraded to the appropriate architecture specific version 56 | - [ ] Confirm that the .app file size has decreased as a result of the upgrade 57 | - [ ] Make sure that data from the last version appears in the new version OK 58 | - [ ] Ensure that `brave://version` lists the expected Brave & Chromium versions 59 | - [ ] With data from the last version, verify that 60 | - [ ] Bookmarks on the bookmark toolbar and bookmark folders can be opened 61 | - [ ] Cookies are preserved 62 | - [ ] Opened tabs can be reloaded 63 | - [ ] Stored passwords are preserved 64 | - [ ] Sync chain created in previous version is retained 65 | - [ ] Social media blocking buttons changes are retained 66 | - [ ] Custom filters under brave://settings/shields/filters are retained 67 | - [ ] Custom lists under brave://settings/shields/filters are retained -------------------------------------------------------------------------------- /WikiTemplate/Desktop/Minor_CR_Bump/wikitemplate-minorCRbump-macOS-x64.md: -------------------------------------------------------------------------------- 1 | ### Installer 2 | 3 | - [ ] Ensured that the following executables work as expected 4 | - [ ] `Brave-Browser-x64.dmg` 5 | - [ ] Check executable size, should be `~290mb` 6 | - [ ] Check signature: If OS Run `spctl --assess --verbose` for the installed version and make sure it returns `accepted`. 7 | - [ ] `Brave-Browser-universal.dmg` 8 | - [ ] Check executable size, should be `~500mb` 9 | - [ ] Check signature: If OS Run `spctl --assess --verbose` for the installed version and make sure it returns `accepted`. 10 | 11 | ### Widevine 12 | 13 | - [ ] Using `x64` build: 14 | - [ ] Verify `Widevine Notification` is shown when you visit Netflix for the first time 15 | - [ ] Test that you can stream on Netflix on a fresh profile after installing Widevine 16 | - [ ] Using `universal` build: 17 | - [ ] Verify `Widevine Notification` is shown when you visit Netflix for the first time 18 | - [ ] Test that you can stream on Netflix on a fresh profile after installing Widevine 19 | 20 | #### Upgrade - `Brave-Browser-x64.dmg` 21 | 22 | - [ ] Make sure that data from the last version appears in the new version OK 23 | - [ ] Ensure that `brave://version` lists the expected Brave & Chromium versions 24 | - [ ] With data from the last version, verify that 25 | - [ ] Bookmarks on the bookmark toolbar and bookmark folders can be opened 26 | - [ ] Cookies are preserved 27 | - [ ] Installed extensions are retained and work correctly 28 | - [ ] Opened tabs can be reloaded 29 | - [ ] Stored passwords are preserved 30 | - [ ] Sync chain created in previous version is retained 31 | - [ ] Social media blocking buttons changes are retained 32 | - [ ] Custom filters under brave://settings/shields/filters are retained 33 | - [ ] Custom lists under brave://settings/shields/filters are retained 34 | - [ ] Rewards 35 | - [ ] BAT balance is retained 36 | - [ ] Auto-contribute list is retained 37 | - [ ] Both Tips and Monthly Contributions are retained 38 | - [ ] Panel transactions list is retained 39 | - [ ] Changes to rewards settings are retained 40 | - [ ] Ensure that Auto Contribute is not being enabled when upgrading to a new version if AC was disabled 41 | - [ ] Ads 42 | - [ ] Both `Estimated pending rewards` & `Ad notifications received this month` are retained 43 | - [ ] Changes to ads settings are retained 44 | - [ ] Ensure that ads are not being enabled when upgrading to a new version if they were disabled 45 | - [ ] Ensure that ads are not disabled when upgrading to a new version if they were enabled 46 | 47 | #### Upgrade - `Brave-Browser-universal.dmg` 48 | 49 | Pre-requisite: Make sure that the previous version is installed using the universal build 50 | - [ ] Make sure that after upgrade, the universal build is upgraded to the appropriate architecture specific version 51 | - [ ] Confirm that the .app file size has decreased as a result of the upgrade 52 | - [ ] Make sure that data from the last version appears in the new version OK 53 | - [ ] Ensure that `brave://version` lists the expected Brave & Chromium versions 54 | - [ ] With data from the last version, verify that 55 | - [ ] Bookmarks on the bookmark toolbar and bookmark folders can be opened 56 | - [ ] Cookies are preserved 57 | - [ ] Opened tabs can be reloaded 58 | - [ ] Stored passwords are preserved 59 | - [ ] Sync chain created in previous version is retained 60 | - [ ] Social media blocking buttons changes are retained 61 | - [ ] Custom filters under brave://settings/shields/filters are retained 62 | - [ ] Custom lists under brave://settings/shields/filters are retained -------------------------------------------------------------------------------- /WikiTemplate/Desktop/Minor_CR_Bump/wikitemplate-minorCRbumpDesktop.md: -------------------------------------------------------------------------------- 1 | ### Installer 2 | 3 | - [ ] Check signature: 4 | - [ ] If macOS, using `arm64` binary run `spctl --assess --verbose` for the installed version and make sure it returns `accepted` 5 | - [ ] If macOS, using `universal` binary run `spctl --assess --verbose` for the installed version and make sure it returns `accepted` 6 | - [ ] If Windows right click on the `brave_installer-x64.exe` and go to Properties, go to the Digital Signatures tab and double click on the signature. Make sure it says "The digital signature is OK" in the popup window 7 | 8 | ### Widevine 9 | 10 | - [ ] Verify `Widevine Notification` is shown when you visit Netflix for the first time 11 | - [ ] Test that you can stream on Netflix on a fresh profile after installing Widevine 12 | - [ ] If macOS, run the above Widevine tests for both `arm64` and `universal` builds 13 | 14 | ### Rewards 15 | 16 | - [ ] Verify that you are able to successfully join Rewards on a fresh profile 17 | 18 | ### TLS Pinning 19 | 20 | - [ ] Visit https://ssl-pinning.someblog.org/ and verify a pinning error is displayed 21 | - [ ] Visit https://pinning-test.badssl.com/ and verify a pinning error is **not** displayed 22 | 23 | ## Update tests 24 | 25 | - [ ] Verify visiting `brave://settings/help` triggers update check 26 | - [ ] Verify once update is downloaded, prompts to `Relaunch` to install update 27 | 28 | ### Upgrade 29 | 30 | - [ ] Make sure that data from the last version appears in the new version OK 31 | - [ ] Ensure that `brave://version` lists the expected Brave & Chromium versions 32 | - [ ] With data from the last version, verify that 33 | - [ ] Bookmarks on the bookmark toolbar and bookmark folders can be opened 34 | - [ ] Cookies are preserved 35 | - [ ] Installed extensions are retained and work correctly 36 | - [ ] Opened tabs can be reloaded 37 | - [ ] Stored passwords are preserved 38 | - [ ] Sync chain created in previous version is retained 39 | - [ ] Social media blocking buttons changes are retained 40 | - [ ] Custom filters under brave://settings/shields/filters are retained 41 | - [ ] Custom lists under brave://settings/shields/filters are retained 42 | - [ ] Rewards 43 | - [ ] BAT balance is retained 44 | - [ ] Auto-contribute list is retained 45 | - [ ] Both Tips and Monthly Contributions are retained 46 | - [ ] Panel transactions list is retained 47 | - [ ] Changes to rewards settings are retained 48 | - [ ] Ensure that Auto Contribute is not being enabled when upgrading to a new version if AC was disabled 49 | - [ ] Ads 50 | - [ ] Both `Estimated pending rewards` & `Ad notifications received this month` are retained 51 | - [ ] Changes to ads settings are retained 52 | - [ ] Ensure that ads are not being enabled when upgrading to a new version if they were disabled 53 | - [ ] Ensure that ads are not disabled when upgrading to a new version if they were enabled 54 | -------------------------------------------------------------------------------- /WikiTemplate/Desktop/wikitemplate-macOS-arm64.md: -------------------------------------------------------------------------------- 1 | ### Installer 2 | 3 | - [ ] Ensured that the following executables work as expected 4 | - [ ] `Brave-Browser-arm64.dmg` 5 | - [ ] Check executable size, should be `~290mb` 6 | - [ ] Check signature: If OS Run `spctl --assess --verbose` for the installed version and make sure it returns `accepted`. 7 | - [ ] `Brave-Browser-arm64.pkg` 8 | - [ ] Check executable size, should be `~290mb` 9 | - [ ] Check signature: If OS Run `spctl --assess --verbose` for the installed version and make sure it returns `accepted`. 10 | - [ ] `Brave-Browser-universal.dmg` 11 | - [ ] Check executable size, should be `~500mb` 12 | - [ ] Check signature: If OS Run `spctl --assess --verbose` for the installed version and make sure it returns `accepted`. 13 | - [ ] `Brave-Browser-universal.pkg` 14 | - [ ] Check executable size, should be `~500mb` 15 | - [ ] Check signature: If OS Run `spctl --assess --verbose` for the installed version and make sure it returns `accepted`. 16 | - [ ] Visited `brave://version` and ensure the following: 17 | - [ ] `arm64` is being displayed when installing via `arm64` and `universal` binaries on `M1` mac 18 | 19 | ### Widevine 20 | 21 | - [ ] Using `universal` build: 22 | - [ ] Verify `Widevine Notification` is shown when you visit Netflix for the first time 23 | - [ ] Test that you can stream on Netflix on a fresh profile after installing Widevine 24 | - [ ] Using `arm64` build: 25 | - [ ] Verify `Widevine Notification` is shown when you visit Netflix for the first time 26 | - [ ] Test that you can stream on Netflix on a fresh profile after installing Widevine 27 | 28 | #### Components 29 | - [ ] Delete Adblock folder from browser profile and restart browser. Visit `brave://components` and verify `Brave Ad Block Updater` downloads and update the component. Repeat for all Brave components 30 | 31 | #### Upgrade - `Brave-Browser-arm64.dmg` 32 | 33 | - [ ] Make sure that data from the last version appears in the new version OK 34 | - [ ] Ensure that `brave://version` lists the expected Brave & Chromium versions 35 | - [ ] With data from the last version, verify that 36 | - [ ] Bookmarks on the bookmark toolbar and bookmark folders can be opened 37 | - [ ] Cookies are preserved 38 | - [ ] Installed extensions are retained and work correctly 39 | - [ ] Opened tabs can be reloaded 40 | - [ ] Stored passwords are preserved 41 | - [ ] Sync chain created in previous version is retained 42 | - [ ] Social media blocking buttons changes are retained 43 | - [ ] Custom filters under brave://settings/shields/filters are retained 44 | - [ ] Custom lists under brave://settings/shields/filters are retained 45 | - [ ] Rewards 46 | - [ ] BAT balance is retained 47 | - [ ] Auto-contribute list is retained 48 | - [ ] Both Tips and Monthly Contributions are retained 49 | - [ ] Panel transactions list is retained 50 | - [ ] Changes to rewards settings are retained 51 | - [ ] Ensure that Auto Contribute is not being enabled when upgrading to a new version if AC was disabled 52 | - [ ] Ads 53 | - [ ] Both `Estimated pending rewards` & `Ad notifications received this month` are retained 54 | - [ ] Changes to ads settings are retained 55 | - [ ] Ensure that ads are not being enabled when upgrading to a new version if they were disabled 56 | - [ ] Ensure that ads are not disabled when upgrading to a new version if they were enabled 57 | 58 | #### Upgrade - `Brave-Browser-universal.dmg` 59 | 60 | Pre-requisite: Make sure that the previous version is installed using the universal build 61 | - [ ] Make sure that after upgrade, the universal build is upgraded to the appropriate architecture specific version 62 | - [ ] Confirm that the .app file size has decreased as a result of the upgrade 63 | - [ ] Make sure that data from the last version appears in the new version OK 64 | - [ ] Ensure that `brave://version` lists the expected Brave & Chromium versions 65 | - [ ] With data from the last version, verify that 66 | - [ ] Bookmarks on the bookmark toolbar and bookmark folders can be opened 67 | - [ ] Cookies are preserved 68 | - [ ] Opened tabs can be reloaded 69 | - [ ] Stored passwords are preserved 70 | - [ ] Sync chain created in previous version is retained 71 | - [ ] Social media blocking buttons changes are retained 72 | - [ ] Custom filters under brave://settings/shields/filters are retained 73 | - [ ] Custom lists under brave://settings/shields/filters are retained -------------------------------------------------------------------------------- /WikiTemplate/Desktop/wikitemplate-macOS-x64.md: -------------------------------------------------------------------------------- 1 | ### Installer 2 | 3 | - [ ] Ensured that the following executables work as expected 4 | - [ ] `Brave-Browser-x64.dmg` 5 | - [ ] Check executable size, should be `~290mb` 6 | - [ ] Check signature: If OS Run `spctl --assess --verbose` for the installed version and make sure it returns `accepted`. 7 | - [ ] `Brave-Browser-universal.dmg` 8 | - [ ] Check executable size, should be `~500mb` 9 | - [ ] Check signature: If OS Run `spctl --assess --verbose` for the installed version and make sure it returns `accepted`. 10 | - [ ] `Brave-Browser-universal.pkg` 11 | - [ ] Check executable size, should be `~500mb` 12 | - [ ] Check signature: If OS Run `spctl --assess --verbose` for the installed version and make sure it returns `accepted`. 13 | 14 | ### Widevine 15 | 16 | - [ ] Using `x64` build: 17 | - [ ] Verify `Widevine Notification` is shown when you visit Netflix for the first time 18 | - [ ] Test that you can stream on Netflix on a fresh profile after installing Widevine 19 | - [ ] Using `universal` build: 20 | - [ ] Verify `Widevine Notification` is shown when you visit Netflix for the first time 21 | - [ ] Test that you can stream on Netflix on a fresh profile after installing Widevine 22 | 23 | #### Upgrade - `Brave-Browser-x64.dmg` 24 | 25 | - [ ] Make sure that data from the last version appears in the new version OK 26 | - [ ] Ensure that `brave://version` lists the expected Brave & Chromium versions 27 | - [ ] With data from the last version, verify that 28 | - [ ] Bookmarks on the bookmark toolbar and bookmark folders can be opened 29 | - [ ] Cookies are preserved 30 | - [ ] Installed extensions are retained and work correctly 31 | - [ ] Opened tabs can be reloaded 32 | - [ ] Stored passwords are preserved 33 | - [ ] Sync chain created in previous version is retained 34 | - [ ] Social media blocking buttons changes are retained 35 | - [ ] Custom filters under brave://settings/shields/filters are retained 36 | - [ ] Custom lists under brave://settings/shields/filters are retained 37 | - [ ] Rewards 38 | - [ ] BAT balance is retained 39 | - [ ] Auto-contribute list is retained 40 | - [ ] Both Tips and Monthly Contributions are retained 41 | - [ ] Panel transactions list is retained 42 | - [ ] Changes to rewards settings are retained 43 | - [ ] Ensure that Auto Contribute is not being enabled when upgrading to a new version if AC was disabled 44 | - [ ] Ads 45 | - [ ] Both `Estimated pending rewards` & `Ad notifications received this month` are retained 46 | - [ ] Changes to ads settings are retained 47 | - [ ] Ensure that ads are not being enabled when upgrading to a new version if they were disabled 48 | - [ ] Ensure that ads are not disabled when upgrading to a new version if they were enabled 49 | 50 | #### Upgrade - `Brave-Browser-universal.dmg` 51 | 52 | Pre-requisite: Make sure that the previous version is installed using the universal build 53 | - [ ] Make sure that after upgrade, the universal build is upgraded to the appropriate architecture specific version 54 | - [ ] Confirm that the .app file size has decreased as a result of the upgrade 55 | - [ ] Make sure that data from the last version appears in the new version OK 56 | - [ ] Ensure that `brave://version` lists the expected Brave & Chromium versions 57 | - [ ] With data from the last version, verify that 58 | - [ ] Bookmarks on the bookmark toolbar and bookmark folders can be opened 59 | - [ ] Cookies are preserved 60 | - [ ] Opened tabs can be reloaded 61 | - [ ] Stored passwords are preserved 62 | - [ ] Sync chain created in previous version is retained 63 | - [ ] Social media blocking buttons changes are retained 64 | - [ ] Custom filters under brave://settings/shields/filters are retained 65 | - [ ] Custom lists under brave://settings/shields/filters are retained -------------------------------------------------------------------------------- /WikiTemplate/Desktop/wikitemplate.md: -------------------------------------------------------------------------------- 1 | ### Installer 2 | 3 | - [ ] Check the installer is close to the size of the last release 4 | - [ ] Check signature: 5 | - [ ] If macOS, using `arm64` binary run `spctl --assess --verbose` for the installed version and make sure it returns `accepted` 6 | - [ ] If macOS, using `universal` binary run `spctl --assess --verbose` for the installed version and make sure it returns `accepted` 7 | - [ ] If Windows right click on the `brave_installer-x64.exe` and go to Properties, go to the Digital Signatures tab and double click on the signature. Make sure it says "The digital signature is OK" in the popup window 8 | 9 | ### About pages 10 | 11 | - [ ] Verify that both `chrome://` and `about://` forward to `brave://` (run through several internal pages) 12 | 13 | ### Adblock lists and filters 14 | 15 | - [ ] Navigate to `brave://adblock` and confirm you are redirected to `brave://settings/shields/filters` 16 | - [ ] Filter lists 17 | - [ ] Type "cookie" into the "Filter lists" search box, and verify that the list is filtered down to just the `Easylist-Cookie List - Filter Obtrusive Cookie Notices` 18 | - [ ] Enable the `Easylist-Cookie List` and refresh the page 19 | - [ ] Expand the regional filter lists and verify that the cookie list is still enabled 20 | - [ ] Add custom filter lists 21 | - [ ] Enter `https://raw.githubusercontent.com/ryanbr/fanboy-adblock/master/fanboy-antifonts.txt` into `Enter filter list URL` and press `Add` 22 | - [ ] Ensure that the `Custom lists` table appears, with the newly added entry; `Last updated` should be now (e.g. `0 seconds ago`) 23 | - [ ] Refresh the page after a few seconds and ensure that the `Last updated` time reflects the time that has passed 24 | - [ ] Use the dropdown next to the entry and verify that all options (`Update now`, `View source`, `Unsubscribe`) are shown 25 | - [ ] Pressing the `Update now` button should update the timestamp appropriately 26 | - [ ] `View source` should open the text of the filter list 27 | - [ ] `Unsubscribe` should delete the entry from the list and hide the table once again 28 | - [ ] Create custom filters 29 | - [ ] The `Create custom filters` section should be visible with a text box and `Save changes` button 30 | - [ ] Adding text to the box, pressing `Save changes`, and refreshing the page should result in the same text appearing in the box after the reload 31 | 32 | ### Importing 33 | 34 | - [ ] Verify that you can import `History`, `Favorites/Bookmarks` and `Passwords` from Google Chrome 35 | - [ ] Verify that you can import `History` and `Bookmarks` from Firefox 36 | - [ ] Verify that you can import `Favorites/Bookmarks` from Microsoft Edge 37 | - [ ] Verify that importing bookmarks using `Bookmark HTML File` retains the folder structure on a clean profile 38 | 39 | ### Context menus 40 | 41 | - [ ] Verify you can block a page element using `Block element via selector` context-menu item 42 | - [ ] Verify selecting `Manage custom filters` opens `brave://adblock` in a NTP 43 | - [ ] Verify removing the rule from `brave://adblock` reflects the change on the website, after reload 44 | 45 | ### Extensions/Plugins 46 | 47 | - [ ] Verify pdfium, Torrent viewer extensions are installed automatically on fresh profile and cannot be disabled (they don't show up in `brave://extensions`) 48 | - [ ] Verify older version of an extension gets updated to new version via Google server 49 | - [ ] Verify that `magnet` links and `.torrent` files correctly open WebTorrent and you're able to download the file(s) 50 | - **Tip:** Free torrents available via https://webtorrent.io/free-torrents 51 | 52 | ### IPFS 53 | 54 | - [ ] Load `vitalik.eth`. Click on `Proceed using Infura server`. Confirm no IPFS interstitial page is shown. Verify the content is loaded via public gateway. 55 | 56 | ### Chrome Web Store (CWS) 57 | 58 | - [ ] Verify that installing https://chrome.google.com/webstore/detail/adblock-plus-free-ad-bloc/cfhdojbkjhnklbpkdaibdccddilifddb from CWS displays the `Brave has not reviewed the extension.` warning via the "Add Extension" modal 59 | 60 | ### Manifest V2 Extensions 61 | 62 | - [ ] Under `brave://settings/extensions/v2` toggle "Enable NoScript" on. Be sure to turn off any other extensions listed here if they are on. 63 | - [ ] Navigate to https://underpassapp.com/StopTheScript/noscript.html and confirm that the page says "JavaScript is disabled". 64 | - [ ] Confirm you can open the extension's panel without any errors. 65 | - [ ] Under `brave://settings/extensions/v2` toggle "Enable uBlock Origin" on. Be sure to turn off any other extensions listed here if they are on. 66 | - [ ] Navigate to a site which contains ads and toggle shields off. Reload the page and confirm ads are still blocked. 67 | - [ ] Confirm you can open the extension's panel without any errors. 68 | - [ ] Confirm panel reflects that items are blocked as expected. 69 | - [ ] Under `brave://settings/extensions/v2` toggle "Enable uMatrix" on. Be sure to turn off any other extensions listed here if they are on. 70 | - [ ] Navigate to a site which contains ads and toggle shields off. Reload the page and confirm ads are still blocked. 71 | - [ ] Confirm you can open the extension's panel without any errors. 72 | - [ ] Confirm panel reflects that items are blocked as expected. 73 | - [ ] Under `brave://settings/extensions/v2` toggle "Enable AdGuard" on. Be sure to turn off any other extensions listed here if they are on. 74 | - [ ] Navigate to a site which contains ads and toggle shields off. Reload the page and confirm ads are still blocked. 75 | - [ ] Confirm you can open the extension's panel without any errors. 76 | - [ ] Confirm panel reflects that items are blocked as expected. 77 | 78 | ### PDF 79 | 80 | - [ ] Test that you can print a PDF 81 | - [ ] Test that PDF is loaded over HTTPS at https://basicattentiontoken.org/BasicAttentionTokenWhitePaper-4.pdf 82 | - [ ] Test that PDF is loaded over HTTP at http://www.pdf995.com/samples/pdf.pdf 83 | 84 | ### Widevine 85 | 86 | - [ ] Verify `Widevine Notification` is shown when you visit Netflix for the first time 87 | - [ ] Test that you can stream on Netflix on a fresh profile after installing Widevine 88 | - [ ] Verify `Widevine Notification` is shown when you visit HBO Max for the first time 89 | - [ ] Test that you can stream on HBO Max on a fresh profile after installing Widevine 90 | - [ ] If macOS, run the above Widevine tests for both `arm64` and `universal` builds 91 | 92 | ### Geolocation 93 | 94 | - [ ] Check that https://browserleaks.com/geo works and shows correct location 95 | - [ ] Check that https://html5demos.com/geo/ works but doesn't require an accurate location 96 | 97 | ### Crash Reporting 98 | 99 | - [ ] Check that loading `brave://crash` & `brave://gpucrash` causes the new tab to crash 100 | - [ ] Check that `brave://crashes` lists the `Uploaded Crash Report ID` once the report has been submitted 101 | - [ ] Verify the crash ID matches the report on Backtrace using `_rxid equal [ value ]` 102 | 103 | ### Bravery settings 104 | 105 | - [ ] Verify that HTTPS Everywhere works by loading http://https-everywhere.badssl.com/ 106 | - [ ] Turning HTTPS Everywhere off and Shields off both disable the redirect to https://https-everywhere.badssl.com/ 107 | - [ ] Verify that toggling `Trackers & ads blocked` works as expected 108 | - [ ] Visit https://testsafebrowsing.appspot.com/s/phishing.html, verify that Safe Browsing (via our Proxy) works for all the listed items 109 | - [ ] Visit https://www.blizzard.com and then turn on script blocking, page should not load. 110 | - [ ] Test that 3rd party storage results are blank at https://jsfiddle.net/7ke9r14a/9/ when 3rd party cookies are blocked and not blank when 3rd party cookies are unblocked 111 | - [ ] Test that https://mixed-script.badssl.com/ shows up as grey not red (no mixed content scripts are run) 112 | - [ ] In `brave://settings/security`, choose a DNS provider from the providers listed under Use secure DNS, load `https://browserleaks.com/dns`, and verify your ISP's DNS resolvers aren't detected and shown; only your chosen DoH provider should appear. 113 | - [ ] Open a New Private Window with Tor, load `https://browserleaks.com/dns`, and verify your ISP's DNS resolvers aren't detected and shown. 114 | 115 | ### Query Filter 116 | 117 | - [ ] Visit https://fmarier.github.io/brave-testing/query-filter.html in a Private window and run the tests as directed 118 | 119 | ### TLS Pinning 120 | 121 | - [ ] Visit https://ssl-pinning.someblog.org/ and verify a pinning error is displayed 122 | - [ ] Visit https://pinning-test.badssl.com/ and verify a pinning error is **not** displayed 123 | 124 | ### Fingerprint Tests 125 | 126 | - [ ] Test that https://diafygi.github.io/webrtc-ips/ doesn't leak IP address for each option under `Settings -> Privacy and Security -> WebRTC IP handling policy` 127 | 128 | ### Brave Ads 129 | 130 | - [ ] Verify when you enable Rewards from panel or `brave://rewards`, Ads are enabled by default 131 | - [ ] Verify Ads UI (panel, settings, etc) shows when in a region with Ads support 132 | - [ ] Verify Ads UI (panel, settings, etc) does not show when in a region without Ads support. Verify the Ads panel does show the 'Sorry! Ads are not yet available in your region.' message. 133 | - [ ] Verify when the system language is English, the Browser language is French, and you are in one of the supported regions, Ad notifications are still served to you. 134 | - [ ] Verify you are served Ad notifications when Ads are enabled 135 | - [ ] Verify ad earnings are reflected in the rewards widget on the NTP. 136 | - [ ] Verify when Ads are toggled off, there are no Ad messages in the logs 137 | - [ ] Verify when Rewards are toggled off (but Ads were not explicitly toggled off), there are no Ads logs recorded 138 | - [ ] Verify view/click/dismiss/landed ad notifications show in `confirmations.json` 139 | - [ ] Verify pages you browse to are being classified in the logs 140 | - [ ] Verify tokens are redeemed by viewing the logs (you can use `--rewards=debug=true` to shorten redemption time) 141 | - [ ] Verify Ad is not shown if a tab is playing media and is only shown after it stops playing 142 | 143 | ### Rewards 144 | 145 | - [ ] Verify that none of the reward endpoints are being contacted when a user visits a media creator (`youtube.com`, `reddit.com`, `twitter.com`, `github.com`) and hasn't joined rewards 146 | - [ ] Verify that `rewards.brave.com`, `pcdn.brave.com`, `grant.rewards.brave.com` or `api.rewards.brave.com` are not being contacted 147 | - [ ] Verify you are able to create a new Rewards profile and are in the unverified state by default 148 | - [ ] Verify when you visit a creator in this state the panel shows a prompt to connect a custodian and no BAT information (earnings, balance, etc) is displayed 149 | - [ ] Verify when you view the NTP widget in this state it shows a prompt to connect a custodian and no BAT information (earnings, balance, etc) is displayed 150 | - [ ] Verify when you visit brave://rewards in this state there are no Auto Contribution, Tipping, or summary panels on this page 151 | - [ ] Verify you can toggle notification ads off/on from the "Manage Brave Ads" panel on brave://rewards 152 | - [ ] Verify you are able to connect a custodian 153 | - [ ] Verify Rewards balance shows correct BAT and USD value on brave://rewards, panel, and NTP widget after you connect 154 | - [ ] Verify when you click on the BR panel while on a site, the panel displays site-specific information (site favicon, domain, attention %) 155 | - [ ] Verify BR panel shows message about an unverified creator 156 | - [ ] Verify "Send Contribution" button is grayed out on the panel for an unverified creator and the tip banner cannot be accessed 157 | - [ ] Verify tip banner shows message about a creator with a different custodian 158 | - [ ] Verify you are able to tip a creator who has the same custodian as you 159 | - [ ] Verify you are able to perform an auto contribution 160 | - [ ] Verify if you disable auto-contribute you are still able to tip creators 161 | - [ ] Verify if auto-contribute is disabled AC does not occur 162 | - [ ] Verify that there is no "Disconnect" option once connected to a custodian 163 | - [ ] Verify that you are able to reset rewards 164 | - [ ] Verify that after rewards are reset, you are now in the non-opted in state 165 | - [ ] Verify you can re-join rewards and the panel, brave://rewards page, and NTP widget are now in the unverified state 166 | 167 | ### Social-media blocking settings 168 | 169 | - [ ] Verify individual `Social media blocking` buttons works as intended when enabled/disabled by visiting https://fmarier.github.io/brave-testing/social-widgets.html 170 | - [ ] ensure that you can log in into https://www.expensify.com while `Allow use of third-party cookies for legacy Google Sign-In` is enabled 171 | - [ ] ensure that once `Allow use of third-party cookies for legacy Google Sign-In` has been disabled, you can't log in into https://www.expensify.com 172 | 173 | ### Sync 174 | 175 | - [ ] Verify you are able to create a sync chain and add a mobile/computer to the chain 176 | - [ ] Verify you are able to join an existing sync chain using code words 177 | - [ ] Verify the device name is shown properly when sync chain is created 178 | - [ ] Verify you are able to add a new mobile device to the chain via QR code/code words 179 | - [ ] Verify newly created bookmarks get sync'd to all devices on the sync chain 180 | - [ ] Verify existing bookmarks on current profile gets sync'd to all devices on the sync chain 181 | - [ ] Verify folder structure is retained after sync completes 182 | - [ ] Verify bookmarks don't duplicate when sync'd from other devices 183 | - [ ] Verify removing bookmark from device gets sync'd to all devices on the sync chain 184 | - [ ] Verify adding/removing a bookmark in offline mode gets sync'd to all devices on the sync chain when device comes online 185 | - [ ] With only two devices in chain, verify removing the other device resets the sync on b-c as well 186 | 187 | ### Tor Tabs 188 | 189 | - [ ] Visit https://check.torproject.org in a Tor window, ensure it shows a success message for using a Tor exit node 190 | - [ ] Visit https://check.torproject.org in a Tor window, note down exit node IP address. Do a hard refresh (Ctrl+Shift+R/Cmd+Shift+R), ensure exit IP changes after page reloads 191 | - [ ] Visit https://check.torproject.org in a Tor window, note down exit node IP address. Click `New Tor connection for this site` in app menu, ensure the exit node IP address changes after page is reloaded 192 | - [ ] Visit https://protonmailrmez3lotccipshtkleegetolb73fuirgj7r4o4vfu7ozyd.onion, https://brave4u7jddbv7cyviptqjc7jusxh72uik7zt6adtckl5f4nwy2v72qd.onion/, and https://search.brave4u7jddbv7cyviptqjc7jusxh72uik7zt6adtckl5f4nwy2v72qd.onion/ in a Tor window and ensure all pages resolve 193 | - [ ] Visit https://browserleaks.com/geo in a Tor window, ensure location isn't shown 194 | - [ ] Verify Torrent viewer doesn't load in a Tor window 195 | - [ ] Ensure you are able to download a file in a Tor window. Verify all Download/Cancel, Download/Retry and Download works in Tor window 196 | 197 | ### Cookie and Cache 198 | 199 | - [ ] Go to http://samy.pl/evercookie/ and set an evercookie. Check that going to prefs, clearing site data and cache, and going back to the evercookie site does not remember the old evercookie value 200 | 201 | ### Chromium/Brave GPU 202 | 203 | - [ ] Verify that `brave://gpu` (Brave) matches `chrome://gpu` (Chrome) when using the same Chromium version 204 | 205 | ### Startup & Components 206 | 207 | - [ ] Verify that Brave is only contacting `*.brave.com` endpoints on first launch using either `Charles Proxy`, `Fiddler`, `Wireshark` or `LittleSnitch` (or a similar application) 208 | - [ ] Verify that opening a NTP doesn't trigger any outbound connections related to widgets without user interaction 209 | - [ ] Remove the following component folders and ensure that they're being re-downloaded after restarting the browser: 210 | - [ ] `afalakplffnnnlkncjhbmahjfjhmlkal`: `AutoplayWhitelist.dat`, `ExtensionWhitelist.dat`, `ReferrerWhitelist.json` and `Greaselion.json` 211 | - [ ] `CertificateRevocation` 212 | - [ ] `cffkpbalmllkdoenhmdmpbkajipdjfam`: `rs-ABPFilterParserData.dat` & `regional_catalog.json` (AdBlock) 213 | - [ ] `gccbbckogglekeggclmmekihdgdpdgoe`: (Sponsored New Tab Images) 214 | - [ ] `Safe Browsing` 215 | - [ ] Restart the browser, load `brave://components`, wait for 8 mins and verify that no component shows any errors 216 | 217 | **Note:** Always double check `brave://components` to make sure there's no errors/missing version numbers 218 | 219 | ### Session storage 220 | 221 | - [ ] Temporarily move away your browser profile and test that a new profile is created on browser relaunch 222 | - macOS - `~/Library/Application\ Support/BraveSoftware/` 223 | - Windows - `%userprofile%\appdata\Local\BraveSoftware\` 224 | - Linux(Ubuntu) - `~/.config/BraveSoftware/` 225 | - [ ] Test that both windows and tabs are being restored, including the current active tab 226 | - [ ] Ensure that tabs are being lazy loaded when a previous session is being restored 227 | 228 | ### Upgrade 229 | 230 | - [ ] Make sure that data from the last version appears in the new version OK 231 | - [ ] Ensure that `brave://version` lists the expected Brave & Chromium versions 232 | - [ ] With data from the last version, verify that: 233 | - [ ] Bookmarks on the bookmark toolbar and bookmark folders can be opened 234 | - [ ] Cookies are preserved 235 | - [ ] Installed extensions are retained and work correctly 236 | - [ ] Opened tabs can be reloaded 237 | - [ ] Stored passwords are preserved 238 | - [ ] Sync chain created in previous version is retained 239 | - [ ] Social media-blocking buttons changes are retained 240 | - [ ] Custom filters under brave://settings/shields/filters are retained 241 | - [ ] Custom lists under brave://settings/shields/filters are retained 242 | - [ ] Rewards 243 | - [ ] BAT balance is retained 244 | - [ ] Auto-contribute list is retained 245 | - [ ] Both Tips and Monthly Contributions are retained 246 | - [ ] Panel transactions list is retained 247 | - [ ] Changes to rewards settings are retained 248 | - [ ] Ensure that Auto Contribute is not being enabled when upgrading to a new version if AC was disabled 249 | - [ ] Ads 250 | - [ ] Both `Estimated pending rewards` & `Ad notifications received this month` are retained 251 | - [ ] Changes to ads settings are retained 252 | - [ ] Ensure that ads are not being enabled when upgrading to a new version if they were disabled 253 | - [ ] Ensure that ads are not disabled when upgrading to a new version if they were enabled 254 | -------------------------------------------------------------------------------- /WikiTemplate/Goupdater/wikitemplate-goupdate.md: -------------------------------------------------------------------------------- 1 | ## Process 2 | 3 | - [ ] Request approval by reviewers for the go-update PR 4 | - [ ] Once approved, create an issue in [`devops repository`](https://github.com/brave/devops/issues) to request deployment of the approved branch to dev environment 5 | - [ ] Request sign-off from @qa-team by testing the changes in dev environment. To use the dev environment, you can use `--use-dev-goupdater-url` with Brave Browser. 6 | - [ ] Merge the changes in go-update to `master` 7 | - [ ] Create an issue in devops to request deployment of the master branch to production environment. 8 | - [ ] Run through the test plan in the PR, once deployed in production. 9 | 10 | ## Test Plan 11 | 12 | Running these tests in addition to the test plan specified for the issue ensures that `go-update` is working correctly. 13 | 14 | - [ ] Open a clean brave-browser profile and verify the following components are updated correctly: 15 | - Brave Local Data Updater 16 | - Brave Ad Block Update 17 | - Brave Tor Client Updater (Mac/Win/Linux) 18 | - NTP Sponsored Images (Locale) 19 | - CRLSet 20 | - Brave SpeedReader Updater 21 | - Brave HTTPS Everywhere Updater 22 | 23 | - Using little snitch/fiddler confirm that there are no direct connections to non-brave/bravesoftware domains. 24 | - We don't proxy request for tor download on development server. So you'll see one request to `amazonaws.com` 25 | 26 | - [ ] **Brave-Local-Data:** 27 | - Navigate to `https://chrome.google.com/webstore/detail/1password-extension-deskt/aomjjhallfgjeglblehebfpbcfeobpgk` and confirm that the extension not verified warning is not displayed. 28 | 29 | ![local-data-updater](https://jumde.github.io/img/local-data-updater.png) 30 | 31 | - [ ] **Brave Ad-Block Update:** 32 | - Navigate to cnn.com - and verify you are able to see ads and trackers blocked 33 | 34 | ![ad-block](https://jumde.github.io/img/ad-block.png) 35 | 36 | - [ ] **Brave Tor Client Updater:** 37 | - Open `Private Window with Tor` 38 | - Navigate to `check.torproject.org` and verify tor works. 39 | 40 | - [ ] **NTP Sponsored Images (Locale):** 41 | - Open 4 new-tab pages 42 | - Verify one of them has the sponsored image 43 | 44 | - [ ] **CRLSet:** 45 | - Navigate to `https://revoked.badssl.com/` and confirm SSL warnings are displayed 46 | 47 | - [ ] **Brave HTTPS Everywhere Updater:** 48 | - Navigate to `http://https-everywhere.badssl.com/` - and verify the shield count for HTTPS Everywhere is updated. 49 | 50 | ![https-everywhere](https://jumde.github.io/img/https-everywhere.png) 51 | 52 | - [ ] **Widevine Content Decryption Module:** 53 | - Navigate to `https://bitmovin.com/demos/drm` - Verify that the modal to install Widevine is displayed. 54 | - Install Widevine 55 | - Navigate to brave://components and verify the component is successfully installed 56 | - Verify that videos play successfully 57 | 58 | 59 | -------------------------------------------------------------------------------- /WikiTemplate/IPFS/wikitemplate-IPFS.md: -------------------------------------------------------------------------------- 1 | # IPFS on Desktop 2 | 3 | 4 | ## Installation & Setup 5 | 6 | ### `IPFS installation` 7 | 8 | - [ ] Verify going to `brave://ipfs` and clicking on `Install and start` installs and shows the latest [`go-ipfs` release](https://github.com/ipfs/go-ipfs/blob/master/CHANGELOG.md), via the `Version:` section under `Node info`. 9 | 10 | ### `Seed profile` 11 | 12 | - [ ] Load `ipns://en.wikipedia-on-ipfs.org`. 13 | - [ ] Choose `Use a Brave local IPFS node`. 14 | - [ ] Run the `IPNS Keys` (add/rotate) section. 15 | - [ ] Run the `Import and Sharing` (page, image, text, video) section. 16 | 17 | ### `go-updater node update` 18 | 19 | - [ ] Verify, using the above profile, that restarting Brave with `--use-dev-goupdater-url`, and clicking on `Restart` via `brave://ipfs` downloads and installs the latest in-development (release) candidate. 20 | - [ ] Confirm that `Method to resolve IPFS resources` is `Brave local IPFS node` in `brave://settings/ipfs`. 21 | - [ ] Confirm that keys and imports are intact, post-migration. 22 | - [ ] Confirm that `brave://ipfs-internals` shows `Node is not running` under `IPFS node status`, with a `Start` button. 23 | - [ ] Click on `Start`. 24 | - [ ] Confirm the node starts, and paths and version info are correct. 25 | 26 | ### `Config` 27 | 28 | - [ ] Verify changing `Maximum IPFS cache size (GB)` on the `brave://settings/ipfs` page (set `Method to resolve IPFS resources` to `Brave local IPFS node` on `brave://settings/ipfs`), the new value is reflected on the diagnostic page (`brave://ipfs`) in the `Repo Stats -> Size` section. 29 | 30 | ## Diagnostic page (`brave://ipfs`) 31 | 32 | - [ ] Verify loading `brave://ipfs` redirects to `brave://ipfs-internals`. 33 | - [ ] Verify, on a clean profile, visiting `brave://ipfs` will present you with an `Install and start` button, which will install and start an IPFS local node. Confirm you see `Node is running` under `IPFS node status`, `Stop`, `Restart`, and `My Node` buttons, and a dynamically updating `Connected peers:` count. 34 | - [ ] Verify that clicking `Stop` temporarily clears all statistics, paths, and config information. 35 | - [ ] Verify that clicking `Start` populates all statistics, paths, and config information, and you see `Stop`, `Restart`, and `My Node` buttons, along with a dynamically updating `Connected peers:` count. 36 | - [ ] Verify that clicking `Restart` clears and then repopulates all stats, paths, and config information, and you see `Stop`, `Restart`, and `My Node` buttons, along with a dynamically updating `Connected peers:` count. 37 | - [ ] Verify that clicking on `(details)` to the right of `Connected peers:` takes you to the `PEERS` pane of `127.0.0.1:45002/ipfs/bafy..../#/` and you see a global map with a dynamically updating peer count and listing, below. 38 | - [ ] Verify that clicking on `Perform a garbage collection sweep` resets and repopulates the `Objects:` and `Size:` stats beneath `Repo Stats`. 39 | - [ ] Verify that clicking `My Node` takes you to the `Status` pane of the IPFS dashboard, with a URL similar to `127.0.0.1:45002/ipfs/bafy..../#/`, where you see `Connected to IPFS`, MB count of files shared, and dynamically updating peers count, as well as your `PEER ID` and `AGENT`. 40 | 41 | ## Import and Sharing 42 | 43 | - [ ] Prerequisites: Brave local IPFS node launched and local gateway configured. On a new profile, loading `ipns://en.wikipedia-on-ipfs.org` and clicking `Use a Brave local IPFS node` on the interstitial page will set you up. 44 | 45 | ### `Importing a page via IPFS` 46 | 47 | - [ ] Load `wikipedia.org`. Context-click the page and select `Import to IPFS > This page`. 48 | - [ ] Verify the content is downloaded and imported successfully. 49 | - [ ] Verify the import folder is opened upon successful import. 50 | - [ ] Verify the shareable link is copied to the clipboard and opens when pasting it into a new tab. 51 | 52 | ### `Importing linked content` 53 | 54 | - [ ] Load `https://search.brave.com/search?q=hiddenmickeys&source=desktop`. Context-click the first link there and select `Import to IPFS > Linked content`. 55 | - [ ] Verify the content is downloaded and imported successfully. 56 | - [ ] Verify the import folder is opened upon successful import. 57 | - [ ] Verify the shareable link is copied to the clipboard and opens when pasting it into a new tab. 58 | 59 | ### `Importing selected audio` 60 | 61 | - [ ] Load `https://samplelib.com/sample-mp3.html`. Context-click any audio file and select `Import to IPFS > Selected audio`. 62 | - [ ] Verify the audio is downloaded and imported successfully. 63 | - [ ] Verify the import folder opens upon successful import. 64 | - [ ] Verify the shareable link is copied to the clipboard and opens when pasting it into a new tab. 65 | 66 | ### `Importing selected image` 67 | 68 | - [ ] Verify you are able to import an image by visiting `search.brave.com`, right-clicking on the logo, and choosing `Import to IPFS > Selected image.` 69 | - [ ] Verify the image is downloaded and imported successfully. 70 | - [ ] Verify the import folder opens upon successful import. 71 | - [ ] Verify the shareable link is copied to the clipboard, and pasting the link in a new tab opens it. 72 | 73 | ### `Importing selected text` 74 | 75 | - [ ] Load `https://lipsum.com/` and make a text selection. Context-click and choose `Import Selected Text to IPFS`. 76 | - [ ] Verify the text is wrapped into a file with id like `file_1` and the imported text is readable inside the file. 77 | - [ ] Verify the import folder opens upon successful import. 78 | - [ ] Verify the shareable link is copied to the clipboard and opens when pasting it into a new tab. 79 | 80 | ### `Importing selected video` 81 | 82 | - [ ] Load the [Big Buck Bunny test file](https://upload.wikimedia.org/wikipedia/commons/c/c0/Big_Buck_Bunny_4K.webm). Verify you are able to import the video via context menu `Import to IPFS > Selected video`. 83 | - [ ] Verify the video is downloaded and imported successfully. 84 | - [ ] Verify the import folder opens upon successful import. 85 | - [ ] Verify the shareable link is copied to the clipboard and opens when pasting in a new tab. 86 | 87 | Note: For the other types, downloading from the IPFS webui (My Node) and ensuring they still play in a media player, is enough. 88 | 89 | ### `Sharing a local file using IPFS (without IPNS keys)` 90 | 91 | - [ ] Verify the IPFS item is available in the main app menu. Go to `IPFS -> Share Local File Using IPFS` select and import any local file. 92 | - [ ] Verify the file is downloaded and imported successfully, 93 | - [ ] Verify the import folder is opened upon successful completion. 94 | - [ ] Verify the shareable link starting with `https://dweb.link/ipfs/` is copied to the clipboard, and opens when pasting into a new tab. 95 | - [ ] Share the following filetypes: 96 | - [ ] .txt 97 | - [ ] .json 98 | - [ ] .mpeg 99 | - [ ] .mp3 100 | - [ ] .mp4 101 | - [ ] .ogg 102 | - [ ] .webm 103 | 104 | ### `Sharing a local folder using IPFS (without IPNS keys)` 105 | 106 | - [ ] Go to `IPFS -> share Local Folder Using IPFS`, and select and import any local folder. 107 | - [ ] Verify the whole folder is downloaded and imported successfully. 108 | - [ ] Verify the import folder opens upon successful import. 109 | - [ ] Verify the shareable link is copied to the clipboard, and opens when pasting into a new tab. 110 | 111 | ## Address bar 112 | 113 | ### Badge shown only when IPFS support is enabled 114 | 115 | - [ ] Verify, on a new profile, you can load `https://en.wikipedia-on-ipfs.org`, switch `Method to resolve IPFS resources` to either `Gateway` or `Brave local IPFS node` in `brave://settings/ipfs`, and then see an `IPFS` badge/icon in the URL bar. 116 | 117 | 118 | ### Badge on a public gateway 119 | 120 | - [ ] Verify that loading `https://dweb.link/ipfs/QmT5NvUtoM5nWFfrQdVrFtvGfKFmG7AHE8P34isapyhCxX/wiki/Mars.html` redirects you seamlessly to `https://bafybeicgmdpvw4duutrmdxl4a7gc52sxyuk7nz5gby77afwdteh3jc5bqa.ipfs.dweb.link/wiki/Mars.html`, and there's an `IPFS` badge/button in the URL bar. Confirm that clicking `IPFS` goes to `ipfs://bafybeicgmdpvw4duutrmdxl4a7gc52sxyuk7nz5gby77afwdteh3jc5bqa/wiki/Mars.html`. 121 | - [ ] Verify that loading `https://ipfs.io/ipns/libp2p.io/` shows an `IPFS` button in the URL bar, and clicking it redirects to `ipns://libp2p.io/`. Confirm it resolves and loads. 122 | 123 | ### Badge on DNSlink websites 124 | 125 | - [ ] Verify clicking on the `IPFS` badge/button on https://blog.ipfs.tech loads `ipns://blog.ipfs.tech` in a new tab. 126 | - [ ] Verify clicking on the `IPFS` badge/button on https://en.wikipedia-on-ipfs.org/wiki/Asia/?foo=bar#Economy loads `ipns://en.wikipedia-on-ipfs.org/wiki/Asia/?foo=bar#Economy` in a new tab. 127 | 128 | ### Badge only on real IPFS resources 129 | 130 | - [ ] Verify https://github.com/ipns/google.com shows no `IPFS` badge/icon in the URL bar (`/ipns/google.com` → `google.com` is not a valid CID, nor it is a DNS name with DNSLink TXT record → not IPFS resource) 131 | - [ ] Verify https://github.com/ipfs/boxo shows no `IPFS` badge/icon in the URL bar (`ipfs/boxo` → `boxo` is not a valid CID → not IPFS resource → no purple button) 132 | 133 | ### Protocol info popup 134 | 135 | - [ ] Load `ipns://brantly.eth` while using `Brave local IPFS node` for the resolver, and confirm there's a clickable info badge "IPFS" to the left of the URL, with on click pop-up that says `This content was loaded over the IPFS protocol.` 136 | 137 | ## Automatic redirects to IPFS 138 | 139 | - [ ] Via `brave://settings/ipfs`, set `Redirect IPFS resources to the configured IPFS gateway` to `On`. 140 | - [ ] Load `https://ipfs.io/ipfs/QmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR` and confirm it redirects to `ipfs://bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi`. 141 | - [ ] Load `https://en.wikipedia-on-ipfs.org/wiki/` and confirm it redirects to `ipns://en.wikipedia-on-ipfs.org/wiki/`. 142 | 143 | 144 | ## IPFS Companion 145 | 146 | - [ ] Verify that toggling `IPFS Companion` to `On` via `brave://settings/ipfs` prompts you to install the extension. After clicking `Add extension`, confirm you get a notification that IPFS Companion was added to Brave, and are then taken to the `Set your IPFS preference` interstitial page. 147 | - [ ] Verify that clicking on the puzzle-piece icon on the browser toolbar, then `IPFS Companion`, will load a popup. 148 | - [ ] Click on the gears (settings) icon and confirm it loads the `Companion Preferences` page. 149 | - [ ] Click on `My Node` and confirm it opens the same ipfs-webui interface as `My Node` at `brave://ipfs-internals` 150 | 151 | ## IPFS URLs 152 | 153 | - [ ] Ensure each of the following IPFS URLs load over both `Gateway` and `Brave local IPFS node` modes: 154 | - [ ] `ipfs://bafybeiemxf5abjwjbikoz4mc3a3dla6ual3jsgpdr4cjr3oz3evfyavhwq/wiki/Vincent_van_Gogh.html#Life` 155 | - [ ] `ipfs://bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi/` 156 | - [ ] `ipfs://QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki/Tokyo_National_Museum.html` 157 | - [ ] `ipfs:QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/readme` 158 | 159 | ## IPNS URLs 160 | 161 | - [ ] Ensure each of the following IPNS URLs load over both `Gateway` and `Brave local IPFS node` modes: 162 | - [ ] `ipns://en.wikipedia-on-ipfs.org` 163 | - [ ] `ipns://en.wikipedia-on-ipfs.org/wiki/Tokyo#Islands` 164 | - [ ] `ipns://docs.ipfs.io` 165 | - [ ] `ipns://brantly.eth` (ENS) 166 | - [ ] `ipns://vitalik.eth` (ENS) 167 | - [ ] `ipns://brad.crypto` (Unstoppable Domains) 168 | 169 | ## Gateway choice 170 | 171 | ## The interstitial page 172 | 173 | - [ ] Confirm a fresh profile has `Method to resolve IPFS resources` set to `Ask` in `brave://settings/ipfs`. 174 | - [ ] Verify visiting `ipfs://bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi` loads the interstitial page. 175 | - [ ] Verify visiting `ipns://en.wikipedia-on-ipfs.org` in a new tab loads the same interstitial page. 176 | - [ ] Verify selecting `Use a public gateway` loads `https://dweb.link/ipns/en.wikipedia-on-ipfs.org/wiki/` which then redirect to unique Origin at `https://en-wikipedia--on--ipfs-org.ipns.dweb.link/wiki/`. 177 | - [ ] Verify selecting `Use a Brave local IPFS node` loads `ipns://en.wikipedia-on-ipfs.org/wiki/`. 178 | 179 | ### Public Path gateway 180 | 181 | - [ ] Verify, on a new profile, you can't change the IPFS public gateway address to `https://cloudflare-ipfs.com/` via `Settings -> IPFS -> IPFS public gateway address -> Change`. 182 | - [ ] An error stating `Only a valid IPFS gateway with Origin isolation enabled can be used in Brave` is displayed ([example](https://github.com/brave/brave-browser/issues/18212#issuecomment-923632150)). 183 | 184 | ### Public Subdomain Gateway 185 | 186 | - [ ] Verify, on a new profile, you can change the IPFS public gateway address to `https://{YOUR-PUBLIC-GATEWAY}` via `Settings -> IPFS -> IPFS public gateway address -> Change`. Refer to the [IPFS public-gateway list](https://ipfs.github.io/public-gateway-checker/). 187 | - [ ] Verify opening `ipns://en.wikipedia-on-ipfs.org/wiki/` and selecting `Use a public gateway` loads `https://{YOUR-PUBLIC-GATEWAY}/ipns/en.wikipedia-on-ipfs.org/wiki/` which then redirect to unique Origin at `https://en-wikipedia--on--ipfs-org.ipns.{YOUR-PUBLIC-GATEWAY}/wiki/` Verify loads `https://cf-ipfs.com/ipns/en.wikipedia-on-ipfs.org/wiki/` which then redirect to unique Origin at `https://en-wikipedia--on--ipfs-org.ipns.{YOUR-PUBLIC-GATEWAY}/wiki/`. 188 | 189 | ### Protocol system handler/OS integration 190 | 191 | #### ipfs:// 192 | 193 | - [ ] Verify (`Windows`) that pressing `Win+R`, typing `open ipfs://bafkreigcnxudvpojjfwncmauociy5q46zsq46oe66cxbyzie3imabuoege`, and pressing `Enter` opens Brave and loads an HTML page with the word `PASS`. 194 | - [ ] Verify (`macOS`): opening Terminal, and typing `open ipfs://bafkreigcnxudvpojjfwncmauociy5q46zsq46oe66cxbyzie3imabuoege`, and pressing `Enter` opens Brave and loads an HTML page with the word `PASS`. 195 | - [ ] Verify (`Linux`) that opening a shell and typing `xdg-open ipfs://bafkreigcnxudvpojjfwncmauociy5q46zsq46oe66cxbyzie3imabuoege` and pressing `Enter` opens Brave and loads an HTML page with the word `PASS`. 196 | 197 | #### ipns:// 198 | 199 | - [ ] Verify (`Windows`) that pressing `Win+R`, typing `open ipns://en.wikipedia-on-ipfs.org/wiki/Tokyo#Islands`, and pressing `Enter` opens Brave and loads an HTML page scrolled to the header `Islands`. 200 | - [ ] Verify (`macOS`): opening Terminal, and typing `open ipns://en.wikipedia-on-ipfs.org/wiki/Tokyo#Islands`, and pressing `Enter` opens Brave and loads an HTML page scrolled to the header `Islands`. 201 | - [ ] Verify (`Linux`) that opening a shell and typing `xdg-open ipns://en.wikipedia-on-ipfs.org/wiki/Tokyo#Islands`, and pressing `Enter` opens Brave and loads an HTML page scrolled to the header `Islands`. 202 | 203 | 204 | ## Peers 205 | 206 | - [ ] Prerequisites: Brave local IPFS node launched and local gateway configured on two machines, locally networked (LAN, can be over Wi-Fi). 207 | 208 | ### `Adding`; see [issue 15567](https://github.com/brave/brave-browser/issues/15567#issuecomment-867983572) for full setup steps 209 | 210 | - [ ] Verify when you go to `brave://settings/ipfs/peers` and click on the `Add` button, it prompts you to enter a new peer-connection string. Confirm that entering an incorrect string yields `This name is not valid` upon clicking `Submit`. (Acceptable ones are only CIDs or something like `**/p2p/**` format.) 211 | - [ ] Verify if a peer is added and node is started, it proposes to restart node to apply changes. 212 | - [ ] Verify the Brave local IPFS node is restarted by clicking `Restart` button; happen it shows error message and suggests to see more on diagnostic page. 213 | - [ ] Verify that `Peering.Peers` section of IPFS node config file got updated (either via `My Node → Settings → IPFS Config` or by manually inspecting `brave_ipfs/config` file). 214 | 215 | ### `Removing` 216 | 217 | - [ ] Verify a peer can be removed by clicking on the Trash icon in the peer line. 218 | 219 | ## IPNS Keys 220 | 221 | - [ ] Prerequisites: Brave local IPFS node launched and local gateway configured. Go to `Settings -> IPFS`, there should be an available `Set up your IPNS keys` option, which opens `brave://settings/ipfs/keys` 222 | 223 | ### `Publishing a local file using an IPNS key` 224 | 225 | - [ ] (after [brave/brave-browser#16998](https://github.com/brave/brave-browser/issues/16998) lands) Verify you're able to share a local file via `IPFS -> Share local file using IPNS -> self`. 226 | - [ ] Verify once the file is imported, the import folder is opened and the file can be downloaded. 227 | - [ ] Once the import is successful, verify a shareable link starting with `https://dweb.link/ipns/` is copied to the clipboard by opening a new tab and pasting from the context menu or `CTRL+V`. 228 | - [ ] Verify you see the IPNS key (e.g. `k51q...`) before the `?filename=filename.ext` from the copied text. 229 | 230 | ### `Publishing a local folder using an IPNS key` 231 | 232 | - [ ] (after [brave/brave-browser#16998](https://github.com/brave/brave-browser/issues/16998) lands) Verify you're able to share a local folder via `IPFS > Share local folder using IPNS -> self`. 233 | - [ ] Verify once the file is imported, the import folder is opened and the file can be downloaded. 234 | - [ ] Once the import is successful, verify a shareable link starting with `https://dweb.link/ipns/` is copied to clipboard by opening a new tab and pasting from context menu or `CTRL+V`. 235 | - [ ] Verify you see the IPNS key (e.g. `k51q...`) before the `?filename=filename.ext` from the copied text. 236 | 237 | ### `Importing keys` 238 | 239 | - [ ] Verify adding a new key by clicking on the `Import` button and choosing an existing key file to import. 240 | - [ ] Verify imported key is available with entered name; verify entering `self` will yield `This name cannot be used`. 241 | - [ ] Verify you cannot import keys with the same name; each key name must be unique. 242 | 243 | ### `Publishing content with IPNS key` 244 | 245 | - [ ] Verify keys are available in all import menus in order to pin content by selected key; the import link should contain the selected key. 246 | 247 | ### `Add/Remove/Rotate keys` 248 | 249 | - [ ] Verify when you click `Add`, it prompts for a key name and generates a new key. 250 | - [ ] Verify clicking on `Add` and entering an existing key name shows a `This name cannot be used` error message. 251 | - [ ] Verify clicking on the Rotate key icon for the `self` key prompts for a key name. Enter a valid, unique name and click `Rotate`. Confirm the key is created with your entered name, original hash, and a new `self` key (with a new hash value) is generated. 252 | - [ ] Verify clicking on the 3-dots menu to the right of a key gives you two options: `Export key` and `Remove key`. Choose `Export key` and confirm you get prompted to save the key. Click `Save` and ensure the key is saved to disk. Delete the key from `brave://settings/ipfs/keys` and now click `Add` to confirm the same key as the original is added from disk. 253 | - [ ] Verify clicking on the 3-dots menu and choosing `Remove key` removes the key from the UI. 254 | 255 | *** 256 | 257 | # IPFS on Android 258 | 259 | ### `Public Gateway Setting` 260 | 261 | - [ ] Verify `IPFS Gateway` option is available under `Brave Shields & Privacy`. 262 | - [ ] Verify the setting is enabled by default. 263 | - [ ] Verify disable/enable setting is retained between browser launch/restarts. 264 | - [ ] Verify setting state is retained during upgrade. 265 | 266 | ### `IPFS/IPNS URI` 267 | 268 | - [ ] Verify visiting `ipfs://bafybeiemxf5abjwjbikoz4mc3a3dla6ual3jsgpdr4cjr3oz3evfyavhwq/wiki/Vincent_van_Gogh.html` for the first time triggers IPFS interstitial page to select public gateway to load the URI. 269 | - [ ] Verify selecting `Use a public gateway` loads `https://bafybeiemxf5abjwjbikoz4mc3a3dla6ual3jsgpdr4cjr3oz3evfyavhwq.ipfs.dweb.link/wiki/Vincent_van_Gogh.html` via public gateway. 270 | - [ ] Verify visiting `ipns://brad.crypto` brings up IPFS interstitial page (`ipfs://QmTiqc12wo2pBsGa9XsbpavkhrjFiyuSWsKyffvZqVGtut`) 271 | - [ ] Verify selecting `Use a public gateway` loads `https://bafybeicp7gd7s4oljtcesmd7e6vypunw26mv3f5ass5ud7b6jrfebc4ux4.ipfs.dweb.link/` via public gateway. 272 | - [ ] Verify when setting is disabled, loading an `ipfs://` URI or `ipns://` URI doesn't show any interstitial page. 273 | - [ ] Verify `ipfs://` URI or `ipns://` URI doesn't load on a private tab even when the setting is enabled. 274 | -------------------------------------------------------------------------------- /WikiTemplate/Tor/wikitemplate-tor-Linux.md: -------------------------------------------------------------------------------- 1 | ## Tor Client Updater 2 | 3 | - [ ] For development go-update-server. Run brave-browser with `--user-data-dir=component-dev --use-dev-goupdater-url` (These flags are only available in v1.7.x). Once the crx is pushed to production run without these flags. 4 | - [ ] Navigate to `brave://components` and verify `Tor Client Updater (OS)` is updated successfully. 5 | - [ ] Open `New Private Window with Tor` and confirm that it starts without any errors. 6 | - [ ] Navigate to `check.torproject.org` and verify that tor is working successfully. 7 | - [ ] Navigate to `brave.com` and `http://brave4u7jddbv7cyviptqjc7jusxh72uik7zt6adtckl5f4nwy2v72qd.onion/` to check if the sites work correctly. 8 | - [ ] Load `brave.com` and `mail.protonmail.com` in a regular Window/Tab and ensure that clicking the `Tor` button in the URL bar correctly launches a Tor window and opens the appropriate `.onion` website. 9 | 10 | ### Linux 11 | - [ ] Navigate to `/biahpgbdmdkfgndcmfiipgcebobojjkp` 12 | - [ ] Run `ldd tor--linux-brave-` to confirm tor client is a static binary 13 | -------------------------------------------------------------------------------- /WikiTemplate/Tor/wikitemplate-tor-Windows.md: -------------------------------------------------------------------------------- 1 | ### **`Windows 11 x64`** 2 | 3 | ### Tor Client Updater 4 | 5 | - [ ] For development go-update-server. Run brave-browser with `--user-data-dir=component-dev --use-dev-goupdater-url` (These flags are only available in v1.7.x). Once the crx is pushed to production run without these flags. 6 | - [ ] Navigate to `brave://components` and verify `Tor Client Updater (OS)` is updated successfully. 7 | - [ ] Open `New Private Window with Tor` and confirm that it starts without any errors. 8 | - [ ] Navigate to `check.torproject.org` and verify that tor is working successfully. 9 | - [ ] Navigate to `brave.com` and `http://brave4u7jddbv7cyviptqjc7jusxh72uik7zt6adtckl5f4nwy2v72qd.onion/` to check if the sites work correctly. 10 | - [ ] Load `brave.com` and `mail.protonmail.com` in a regular Window/Tab and ensure that clicking the `Tor` button in the URL bar correctly launches a Tor window and opens the appropriate `.onion` website. 11 | 12 | ### Windows 13 | - [ ] Setup Windows SDK by downloading - https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk/ 14 | - [ ] Run `"C:\Program Files (x86)\Windows Kits\10\bin\x86\signtool.exe" verify /pa "C:\Users\\AppData\Local\BraveSoftware\Brave-Browser-\User Data\cpoalefficncklhjfpglfiplenlpccdb\\tor--win-brave-.exe"` to verify if the signature of the binary is correct. 15 | 16 | ### **`Windows 10 x64`** 17 | 18 | ### Tor Client Updater 19 | 20 | - [ ] For development go-update-server. Run brave-browser with `--user-data-dir=component-dev --use-dev-goupdater-url` (These flags are only available in v1.7.x). Once the crx is pushed to production run without these flags. 21 | - [ ] Navigate to `brave://components` and verify `Tor Client Updater (OS)` is updated successfully. 22 | - [ ] Open `New Private Window with Tor` and confirm that it starts without any errors. 23 | - [ ] Navigate to `check.torproject.org` and verify that tor is working successfully. 24 | - [ ] Navigate to `brave.com` and `http://brave4u7jddbv7cyviptqjc7jusxh72uik7zt6adtckl5f4nwy2v72qd.onion/` to check if the sites work correctly. 25 | - [ ] Load `brave.com` and `mail.protonmail.com` in a regular Window/Tab and ensure that clicking the `Tor` button in the URL bar correctly launches a Tor window and opens the appropriate `.onion` website. 26 | 27 | ### Windows 28 | - [ ] Setup Windows SDK by downloading - https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk/ 29 | - [ ] Run `"C:\Program Files (x86)\Windows Kits\10\bin\x86\signtool.exe" verify /pa "C:\Users\\AppData\Local\BraveSoftware\Brave-Browser-\User Data\cpoalefficncklhjfpglfiplenlpccdb\\tor--win-brave-.exe"` to verify if the signature of the binary is correct. 30 | 31 | ### **`Windows 10 x86`** 32 | 33 | ### Tor Client Updater 34 | 35 | - [ ] For development go-update-server. Run brave-browser with `--user-data-dir=component-dev --use-dev-goupdater-url` (These flags are only available in v1.7.x). Once the crx is pushed to production run without these flags. 36 | - [ ] Navigate to `brave://components` and verify `Tor Client Updater (OS)` is updated successfully. 37 | - [ ] Open `New Private Window with Tor` and confirm that it starts without any errors. 38 | - [ ] Navigate to `check.torproject.org` and verify that tor is working successfully. 39 | - [ ] Navigate to `brave.com` and `http://brave4u7jddbv7cyviptqjc7jusxh72uik7zt6adtckl5f4nwy2v72qd.onion/` to check if the sites work correctly. 40 | - [ ] Load `brave.com` and `mail.protonmail.com` in a regular Window/Tab and ensure that clicking the `Tor` button in the URL bar correctly launches a Tor window and opens the appropriate `.onion` website. 41 | 42 | ### Windows 43 | - [ ] Setup Windows SDK by downloading - https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk/ 44 | - [ ] Run `"C:\Program Files (x86)\Windows Kits\10\bin\x86\signtool.exe" verify /pa "C:\Users\\AppData\Local\BraveSoftware\Brave-Browser-\User Data\cpoalefficncklhjfpglfiplenlpccdb\\tor--win-brave-.exe"` to verify if the signature of the binary is correct. 45 | -------------------------------------------------------------------------------- /WikiTemplate/Tor/wikitemplate-tor-macOS(Intel).md: -------------------------------------------------------------------------------- 1 | ### **`macOS 14.x Sonoma`** 2 | 3 | ### Tor Client Updater 4 | 5 | - [ ] For development go-update-server. Run brave-browser with `--user-data-dir=component-dev --use-dev-goupdater-url` (These flags are only available in v1.7.x). Once the crx is pushed to production run without these flags. 6 | - [ ] Navigate to `brave://components` and verify `Tor Client Updater (OS)` is updated successfully. 7 | - [ ] Open `New Private Window with Tor` and confirm that it starts without any errors. 8 | - [ ] Navigate to `check.torproject.org` and verify that tor is working successfully. 9 | - [ ] Navigate to `brave.com` and `http://brave4u7jddbv7cyviptqjc7jusxh72uik7zt6adtckl5f4nwy2v72qd.onion/` to check if the sites work correctly. 10 | - [ ] Load `brave.com` and `mail.protonmail.com` in a regular Window/Tab and ensure that clicking the `Tor` button in the URL bar correctly launches a Tor window and opens the appropriate `.onion` website. 11 | 12 | ### MacOS 13 | - [ ] Navigate to `/Users//Library/Application Support/BraveSoftware/Brave-Browser-/cldoidikboihgcjfkhdeidbpclkineef/` 14 | - [ ] Run `codesign -vvvv tor--darwin-brave-` to confirm codesign is valid 15 | - [ ] For MacOS Catalina (10.15+) - Run `spctl -a -vv -t install tor--darwin-brave-` to verify that the binary is notarized. 16 | 17 | ### **`macOS 13.x Ventura`** 18 | 19 | ### Tor Client Updater 20 | 21 | - [ ] For development go-update-server. Run brave-browser with `--user-data-dir=component-dev --use-dev-goupdater-url` (These flags are only available in v1.7.x). Once the crx is pushed to production run without these flags. 22 | - [ ] Navigate to `brave://components` and verify `Tor Client Updater (OS)` is updated successfully. 23 | - [ ] Open `New Private Window with Tor` and confirm that it starts without any errors. 24 | - [ ] Navigate to `check.torproject.org` and verify that tor is working successfully. 25 | - [ ] Navigate to `brave.com` and `http://brave4u7jddbv7cyviptqjc7jusxh72uik7zt6adtckl5f4nwy2v72qd.onion/` to check if the sites work correctly. 26 | - [ ] Load `brave.com` and `mail.protonmail.com` in a regular Window/Tab and ensure that clicking the `Tor` button in the URL bar correctly launches a Tor window and opens the appropriate `.onion` website. 27 | 28 | ### MacOS 29 | - [ ] Navigate to `/Users//Library/Application Support/BraveSoftware/Brave-Browser-/cldoidikboihgcjfkhdeidbpclkineef/` 30 | - [ ] Run `codesign -vvvv tor--darwin-brave-` to confirm codesign is valid 31 | - [ ] For MacOS Catalina (10.15+) - Run `spctl -a -vv -t install tor--darwin-brave-` to verify that the binary is notarized. 32 | 33 | ### **`macOS 12.x Monterey`** 34 | 35 | ### Tor Client Updater 36 | 37 | - [ ] For development go-update-server. Run brave-browser with `--user-data-dir=component-dev --use-dev-goupdater-url` (These flags are only available in v1.7.x). Once the crx is pushed to production run without these flags. 38 | - [ ] Navigate to `brave://components` and verify `Tor Client Updater (OS)` is updated successfully. 39 | - [ ] Open `New Private Window with Tor` and confirm that it starts without any errors. 40 | - [ ] Navigate to `check.torproject.org` and verify that tor is working successfully. 41 | - [ ] Navigate to `brave.com` and `http://brave4u7jddbv7cyviptqjc7jusxh72uik7zt6adtckl5f4nwy2v72qd.onion/` to check if the sites work correctly. 42 | - [ ] Load `brave.com` and `mail.protonmail.com` in a regular Window/Tab and ensure that clicking the `Tor` button in the URL bar correctly launches a Tor window and opens the appropriate `.onion` website. 43 | 44 | ### MacOS 45 | - [ ] Navigate to `/Users//Library/Application Support/BraveSoftware/Brave-Browser-/cldoidikboihgcjfkhdeidbpclkineef/` 46 | - [ ] Run `codesign -vvvv tor--darwin-brave-` to confirm codesign is valid 47 | - [ ] For MacOS Catalina (10.15+) - Run `spctl -a -vv -t install tor--darwin-brave-` to verify that the binary is notarized. 48 | 49 | ### **`macOS 11.x Big Sur`** 50 | 51 | ### Tor Client Updater 52 | 53 | - [ ] For development go-update-server. Run brave-browser with `--user-data-dir=component-dev --use-dev-goupdater-url` (These flags are only available in v1.7.x). Once the crx is pushed to production run without these flags. 54 | - [ ] Navigate to `brave://components` and verify `Tor Client Updater (OS)` is updated successfully. 55 | - [ ] Open `New Private Window with Tor` and confirm that it starts without any errors. 56 | - [ ] Navigate to `check.torproject.org` and verify that tor is working successfully. 57 | - [ ] Navigate to `brave.com` and `http://brave4u7jddbv7cyviptqjc7jusxh72uik7zt6adtckl5f4nwy2v72qd.onion/` to check if the sites work correctly. 58 | - [ ] Load `brave.com` and `mail.protonmail.com` in a regular Window/Tab and ensure that clicking the `Tor` button in the URL bar correctly launches a Tor window and opens the appropriate `.onion` website. 59 | 60 | ### MacOS 61 | - [ ] Navigate to `/Users//Library/Application Support/BraveSoftware/Brave-Browser-/cldoidikboihgcjfkhdeidbpclkineef/` 62 | - [ ] Run `codesign -vvvv tor--darwin-brave-` to confirm codesign is valid 63 | - [ ] For MacOS Catalina (10.15+) - Run `spctl -a -vv -t install tor--darwin-brave-` to verify that the binary is notarized. 64 | 65 | ### **`macOS 10.15.x Catalina`** 66 | 67 | ### Tor Client Updater 68 | 69 | - [ ] For development go-update-server. Run brave-browser with `--user-data-dir=component-dev --use-dev-goupdater-url` (These flags are only available in v1.7.x). Once the crx is pushed to production run without these flags. 70 | - [ ] Navigate to `brave://components` and verify `Tor Client Updater (OS)` is updated successfully. 71 | - [ ] Open `New Private Window with Tor` and confirm that it starts without any errors. 72 | - [ ] Navigate to `check.torproject.org` and verify that tor is working successfully. 73 | - [ ] Navigate to `brave.com` and `http://brave4u7jddbv7cyviptqjc7jusxh72uik7zt6adtckl5f4nwy2v72qd.onion/` to check if the sites work correctly. 74 | - [ ] Load `brave.com` and `mail.protonmail.com` in a regular Window/Tab and ensure that clicking the `Tor` button in the URL bar correctly launches a Tor window and opens the appropriate `.onion` website. 75 | 76 | ### MacOS 77 | - [ ] Navigate to `/Users//Library/Application Support/BraveSoftware/Brave-Browser-/cldoidikboihgcjfkhdeidbpclkineef/` 78 | - [ ] Run `codesign -vvvv tor--darwin-brave-` to confirm codesign is valid 79 | - [ ] For MacOS Catalina (10.15+) - Run `spctl -a -vv -t install tor--darwin-brave-` to verify that the binary is notarized. 80 | -------------------------------------------------------------------------------- /WikiTemplate/Tor/wikitemplate-tor-macOS(arm64).md: -------------------------------------------------------------------------------- 1 | ### **`macOS 14.x Sonoma`** 2 | 3 | ### Tor Client Updater 4 | 5 | - [ ] For development go-update-server. Run brave-browser with `--user-data-dir=component-dev --use-dev-goupdater-url` (These flags are only available in v1.7.x). Once the crx is pushed to production run without these flags. 6 | - [ ] Navigate to `brave://components` and verify `Tor Client Updater (OS)` is updated successfully. 7 | - [ ] Open `New Private Window with Tor` and confirm that it starts without any errors. 8 | - [ ] Navigate to `check.torproject.org` and verify that tor is working successfully. 9 | - [ ] Navigate to `brave.com` and `http://brave4u7jddbv7cyviptqjc7jusxh72uik7zt6adtckl5f4nwy2v72qd.onion/` to check if the sites work correctly. 10 | - [ ] Load `brave.com` and `mail.protonmail.com` in a regular Window/Tab and ensure that clicking the `Tor` button in the URL bar correctly launches a Tor window and opens the appropriate `.onion` website. 11 | 12 | ### MacOS 13 | - [ ] Navigate to `/Users//Library/Application Support/BraveSoftware/Brave-Browser-/cldoidikboihgcjfkhdeidbpclkineef/` 14 | - [ ] Run `codesign -vvvv tor--darwin-brave-` to confirm codesign is valid 15 | - [ ] For MacOS Catalina (10.15+) - Run `spctl -a -vv -t install tor--darwin-brave-` to verify that the binary is notarized. 16 | 17 | ### **`macOS 13.x Ventura`** 18 | 19 | ### Tor Client Updater 20 | 21 | - [ ] For development go-update-server. Run brave-browser with `--user-data-dir=component-dev --use-dev-goupdater-url` (These flags are only available in v1.7.x). Once the crx is pushed to production run without these flags. 22 | - [ ] Navigate to `brave://components` and verify `Tor Client Updater (OS)` is updated successfully. 23 | - [ ] Open `New Private Window with Tor` and confirm that it starts without any errors. 24 | - [ ] Navigate to `check.torproject.org` and verify that tor is working successfully. 25 | - [ ] Navigate to `brave.com` and `http://brave4u7jddbv7cyviptqjc7jusxh72uik7zt6adtckl5f4nwy2v72qd.onion/` to check if the sites work correctly. 26 | - [ ] Load `brave.com` and `mail.protonmail.com` in a regular Window/Tab and ensure that clicking the `Tor` button in the URL bar correctly launches a Tor window and opens the appropriate `.onion` website. 27 | 28 | ### MacOS 29 | - [ ] Navigate to `/Users//Library/Application Support/BraveSoftware/Brave-Browser-/cldoidikboihgcjfkhdeidbpclkineef/` 30 | - [ ] Run `codesign -vvvv tor--darwin-brave-` to confirm codesign is valid 31 | - [ ] For MacOS Catalina (10.15+) - Run `spctl -a -vv -t install tor--darwin-brave-` to verify that the binary is notarized. 32 | -------------------------------------------------------------------------------- /WikiTemplate/Tor/wikitemplate-tor.md: -------------------------------------------------------------------------------- 1 | ## Tor Client Updater 2 | 3 | - [ ] For development go-update-server. Run brave-browser with `--user-data-dir=component-dev --use-dev-goupdater-url` (These flags are only available in v1.7.x). Once the crx is pushed to production run without these flags. 4 | - [ ] Navigate to `brave://components` and verify `Tor Client Updater (OS)` is updated successfully. 5 | - [ ] Open `New Private Window with Tor` and confirm that it starts without any errors. 6 | - [ ] Navigate to `check.torproject.org` and verify that tor is working successfully. 7 | - [ ] Navigate to `brave.com` and `http://brave4u7jddbv7cyviptqjc7jusxh72uik7zt6adtckl5f4nwy2v72qd.onion/` to check if the sites work correctly. 8 | - [ ] Load `brave.com` and `mail.protonmail.com` in a regular Window/Tab and ensure that clicking the `Tor` button in the URL bar correctly launches a Tor window and opens the appropriate `.onion` website. 9 | 10 | ### Windows 11 | - [ ] Setup Windows SDK by downloading - https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk/ 12 | - [ ] Run `"C:\Program Files (x86)\Windows Kits\10\bin\x86\signtool.exe" verify /pa "C:\Users\\AppData\Local\BraveSoftware\Brave-Browser-\User Data\cpoalefficncklhjfpglfiplenlpccdb\\tor--win-brave-.exe"` to verify if the signature of the binary is correct. 13 | 14 | ### MacOS 15 | - [ ] Navigate to `/Users//Library/Application Support/BraveSoftware/Brave-Browser-/cldoidikboihgcjfkhdeidbpclkineef/` 16 | - [ ] Run `codesign -vvvv tor--darwin-brave-` to confirm codesign is valid 17 | - [ ] For MacOS Catalina (10.15+) - Run `spctl -a -vv -t install tor--darwin-brave-` to verify that the binary is notarized. 18 | 19 | ### Linux 20 | - [ ] Navigate to `/biahpgbdmdkfgndcmfiipgcebobojjkp` 21 | - [ ] Run `ldd tor--linux-brave-` to confirm tor client is a static binary 22 | -------------------------------------------------------------------------------- /WikiTemplate/iOS/wikitemplate-ios.md: -------------------------------------------------------------------------------- 1 | 2 | ## Installer 3 | 4 | - [ ] Check that installer is close to the size of the last release 5 | - [ ] Check the Brave version in About and make sure it is EXACTLY as expected 6 | 7 | ## Data 8 | 9 | - [ ] Verify that data from the previous build appears in the updated build as expected (bookmarks, history, etc.) 10 | - [ ] Verify that cookies from the previous build are preserved after upgrade 11 | - [ ] Verify saved passwords are retained after upgrade 12 | - [ ] Verify stats are retained after upgrade 13 | - [ ] Verify sync chain created in the previous version is still retained on upgrade 14 | - [ ] Verify per-site settings are preserved after upgrade 15 | 16 | ## Bookmarks 17 | 18 | - [ ] Verify that creating a bookmark works 19 | - [ ] Verify that tapping a bookmark from bookmark manager loads the bookmark 20 | - [ ] Verify that deleting a bookmark works 21 | - [ ] Verify that creating a bookmark folder works 22 | - [ ] Verify that creating a bookmark inside the created folder works 23 | - [ ] Verify that you can add a bookmark directly inside a bookmark folder 24 | - [ ] Verify that you can delete a bookmark in edit mode 25 | - [ ] Verify that you can delete a bookmark folder with bookmarks inside 26 | - [ ] Verify adding a bookmark domain, subpaths is retained and you are successfully able to visit the domain subpath in a new tab 27 | - [ ] Verify adding bookmark for many open tabs works. Ensured opening all bookmarks in `Saved tabs` folder will load all the tabs 28 | - [ ] Verify import and export bookmarks works 29 | 30 | ## Favorites 31 | 32 | - [ ] Verify editing favorites and changing their URLs updates the favicons accordingly 33 | - [ ] Verify that you can remove favorites 34 | - [ ] Verify that you can add new favorites from the `Share with...` menu 35 | - [ ] Verify adding Favorites Widget to home screen and ensure favorites are updated on the widget accordingly 36 | 37 | ## Context menus 38 | 39 | - [ ] Make sure context menu items in the URL bar work 40 | - [ ] Make sure context menu items on content work with no selected text 41 | - [ ] Make sure context menu items on content work with selected text 42 | - [ ] Make sure context menu items on content work inside an editable control (input, textarea, or contenteditable) 43 | - [ ] Verify you can open links in a new tab or private tab. Ensure you can open links in background tabs 44 | - [ ] Verify all actions work in context menu when long pressing on `+` in the toolbar 45 | - [ ] Verify all actions work in context menu when long pressing on tab icon 46 | - [ ] Verify `Recently Closed Tabs` is opened when long pressing `+` icon in tab view 47 | 48 | ## Navigation 49 | 50 | - [ ] Verify search works from the search box on NTP 51 | - [ ] Verify able to perform voice search by pressing the microphone icon in URL bar 52 | - [ ] Verify that searching for `javascript:alert(123)` via the omnibox doesn't do anything/trigger a JS modal 53 | - [ ] Verify changing search engine in settings will update search queries for regular and private tabs 54 | - [ ] Verify tapping on arrow icon for the suggested searches will only populate that search query in the search box 55 | - [ ] Verify scanning QR code from the search box will highlight scanned url 56 | - [ ] Verify all actions in toolbar both in top and bottom positions 57 | - [ ] Verify searching page content using `Find in Page` works 58 | - [ ] Verify navigating social media and video sites does not cause loading issues when scrolling or reloading pages 59 | 60 | ## Navigation [iPad] 61 | 62 | - [ ] Verify user is able to navigate/search using connected hardware keyboard 63 | - [ ] Verify long pressing CMD key will display keyboard shortcuts 64 | - [ ] Ensure the keyboard shortcuts are working 65 | - [ ] Ensure using Brave with `Split View` & `Split Over` works with other apps 66 | 67 | ## Downloads 68 | 69 | - [ ] Verify that you can save an image from a site 70 | - [ ] Verify that you are able to save a GIF image 71 | 72 | ## Reader Mode 73 | 74 | - [ ] Visit `https://theverge.com`, open any article, verify the reader mode icon is shown in the URL bar 75 | - [ ] Verify tapping on the reader mode icon opens the article in reader mode 76 | - [ ] Edit reader mode settings and open different pages in reader mode and verify if the setting is retained across each article 77 | - [ ] Verify reader mode works when toolbar is set as Top Bar and Bottom Bar 78 | 79 | ## Gestures 80 | 81 | - [ ] Verify pinch to zoom in/out gestures work on `https://www.homedepot.com` 82 | - [ ] Verify that the `Page Zoom` handler under `Settings` works 83 | - [ ] Verify that navigating to a different origin resets the zoom 84 | - [ ] Swipe back and forward to navigate, verify this works as expected 85 | 86 | ## Password Managers 87 | 88 | - [ ] Verify tapping on 1Password on the slide-out keyboard launches 1Password app and you're able to select the stored credentials 89 | - [ ] Verify tapping on Bitwarden password manager in the autofill field launches the app and auto-fills the stored data 90 | 91 | ## Shields Settings 92 | 93 | - [ ] Enable all switches in `Settings` and visit a site and disable `Block Scripts`. Kill and relaunch the app and verify if the site Shields settings are retained 94 | 95 | ## Browser Lock 96 | 97 | - [ ] Verify browser lock enables device passcode to lock/unlock the browser 98 | - [ ] Verify swipe up/swipe down with browser in focus doesn't ask for device passcode 99 | - [ ] Verify cancel passcode shows unlock message 100 | - [ ] Remove the app from memory and relaunch, enter a wrong passcode, the browser should not be unlocked 101 | - [ ] Verify cancel fingerprint confirmation/face unlock shows enter passcode window when fingerprint/face unlock is set up on the device 102 | 103 | ## Brave Rewards/Ads 104 | 105 | - [ ] Verify wallet is auto-created after enabling Rewards 106 | - [ ] Verify when you click on the Brave Rewards panel while on a site, the panel displays if the site is verified or not 107 | - [ ] Verify ads are only shown while the app is being used 108 | - [ ] Verify tapping on an ad notification shows the landing page 109 | - [ ] Verify inline-content ads show on Brave News and are correctly redeemed from the server 110 | - [ ] Verify `view`, `clicked`, `landed` and `dismiss` confirmation states are logged based on the action. Ensure these are working for inline ads, ad notifications and New Tab Page ads. 111 | 112 | ## Sync 113 | 114 | - [ ] Verify you are able to join Sync chain by scanning the QR code 115 | - [ ] Verify you are able to join Sync chain using code words 116 | - [ ] Verify you are able to create a Sync chain on the device and add other devices to the chain via QR code/code words 117 | - [ ] Verify that bookmarks from other devices on the chain show up on the mobile device after sync completes 118 | - [ ] Verify newly created bookmarks get synced to all devices on the Sync chain 119 | - [ ] Verify existing bookmarks before joining Sync chain also gets sync'd to all devices on the Sync chain 120 | - [ ] Verify history sync is disabled by default. Enabling it starts sync'ing history items as well (limited to 200 entries) 121 | - [ ] Verify sync works on an upgraded profile and new bookmarks added post-upgrade sync across devices on the chain 122 | - [ ] Verify you can create a standalone Sync chain with one device 123 | - [ ] Verify starting sync chain using segmented tab for other devices. Ensure enabling `Open Tabs` will display tabs from other devices 124 | - [ ] Verify sharing pages with `Send To Your Devices` works as expected 125 | - [ ] Verify `Sync Internals` page data is populated when connected to sync chain 126 | - [ ] Verify when using `Delete Sync Account` will remove all devices connected to sync chain 127 | 128 | ## Playlist & Autoplay 129 | 130 | - [ ] Verify Playlist is enabled by default on a clean install 131 | - [ ] Verify when a site with audio/video is detected, `Playlist` button is shown in URL bar and a notification badge on the menu 132 | - [ ] Verify clicking the `Playlist` button adds audio/video to playlist and initiates offline play 133 | - [ ] Verify adding audio/video to playlist via share menu works as expected 134 | - [ ] Verify adding audio/video to playlist via long press context menu works as expected 135 | - [ ] Verify Autoplay is enabled by default 136 | - [ ] Verify with Autoplay enabled, able to play audio/video automatically 137 | - [ ] Verify with background audio enabled, able to play audio/video with device locked or app in background 138 | - [ ] Verify Playlist media works with CarPlay on iOS devices 139 | - [ ] Verify playback gestures are working in Playlist 140 | - [ ] Verify adding shared folder to playlist using `https://playlist.brave.com/bsa-sample` works. Verify all actions on shared folder are working 141 | 142 | ## Brave News 143 | 144 | - [ ] Verify Brave News opt-in is shown on a clean install 145 | - [ ] Verify once opted-in Brave News starts showing articles 146 | - [ ] Verify inline-content ads are shown on Brave News 147 | - [ ] Verify able to add custom RSS feed to the list of sources. Ensure this is working when entering custom URL manually and through the share menu when at a blog page 148 | - [ ] Verify able to hide content from sources within the `Popular Sources` and `Suggested` categories by long-press on the card 149 | - [ ] Verify adding Top News Brave widget to home screen will display news articles. Ensure tapping on news articles will load in brave 150 | 151 | ## VPN 152 | 153 | - [ ] Verify purchasing VPN subscription will install VPN profile and establish connection 154 | - [ ] Verify tunneling works by navigating to `https://ipinfo.io` 155 | - [ ] Verify changing server region will update VPN connection 156 | - [ ] Verify changing protocol from WireGuard to IKEv2 works as expected 157 | - [ ] Verify `Reset Configuration` will reset everything but the region selected 158 | 159 | ## Bravery settings 160 | 161 | - [ ] Check that block ad and unblock ad works on `http://slashdot.org` 162 | - [ ] Check that toggling to blocking and allow ads works as expected. Ensure pre-roll ads are removed on `https://youtube.com` 163 | - [ ] Verify that tapping through a cert error in `https://badssl.com` works 164 | - [ ] Verify Safe Browsing protection on `https://testsafebrowsing.appspot.com/` in the iOS 165 | - [ ] Verify debounce/deAMP settings using `https://dev-pages.brave.software/navigation-tracking/debouncing.html` 166 | - [ ] Verify Block Cookie Consent Notices works when navigating to `https://amazon.co.uk` 167 | - [ ] Verify switch to app dialogs are suppressed when loading `https://reddit.com`, `https://twitter.com` and `https://google.com/maps` 168 | - [ ] Enable `Block Scripts` globally from `Settings`. Visit `https://blizzard.com` and confirm the carousel is disabled at the top of the page. Tap on `Shields` and disable `Block Scripts`; the page content should load properly 169 | - [ ] Enable `Block Scripts` via shields panel under `https://blizzard.com` and then load `https://kkarikos.github.io` and ensure that `Block Scripts` isn't persisting on other websites/navigation. 170 | - [ ] Ensure blocking ads work using `Standard` and `Aggressive` settings 171 | - [ ] Verify that default Brave Shields settings take effect on pages with no site settings 172 | - [ ] Verify that the `Cloudflare` CAPTCHA check under `https://browser-compat.turnstile.workers.dev` passes when clicking on `Verify you are human`. 173 | 174 | ### Fingerprint Tests 175 | 176 | - [ ] Verify that the audio fingerprint is blocked at `https://audiofingerprint.openwpm.com` when fingerprinting protection is on 177 | - [ ] Verify that `https://diafygi.github.io/webrtc-ips/` doesn't leak IP address when `Block all fingerprinting protection` is on 178 | - [ ] Verify fingerprinting test cases in `https://dev-pages.brave.software/fingerprinting/farbling.html` 179 | 180 | ## Content tests 181 | 182 | - [ ] Go to `https://feedly.com` and make sure that the password can be saved. Make sure the saved password is auto-populated when you visit the site again. 183 | - [ ] Open an email on `https://mail.google.com` and tap on a link. Make sure it works 184 | - [ ] Verify that PDF is loaded over `HTTPS` at `https://basicattentiontoken.org/BasicAttentionTokenWhitePaper-4.pdf` 185 | - [ ] Verify that PDF is loaded over `HTTP` at `http://www.pdf995.com/samples/pdf.pdf` 186 | - [ ] Verify that `https://mixed-script.badssl.com` shows up as grey, not red (no mixed-content scripts are run) 187 | - [ ] Verify that "Security Certificate" is shown in the main menu for secured websites 188 | 189 | ## WebAuthn 190 | 191 | - [ ] Verify browser prompts for security key when trying to log in to accounts 192 | - [ ] Verify you are able to successfully authenticate an account using security key when prompted 193 | - [ ] Verify quickly connecting and disconnecting doesn't cause issues authenticating using security keys 194 | - [ ] Verify you are able to use security keys on both normal and private tabs 195 | - [ ] Verify you are able to use security keys to authenticate using NFC 196 | 197 | ## App linker 198 | 199 | - [ ] Long-press on a link in the Twitter app to get the share picker, choose Brave. Verify Brave doesn't crash after opening the link 200 | 201 | ## Session storage 202 | 203 | - [ ] Verify that tabs restore when closed, including active tab 204 | - [ ] Verify that Brave restores/loads without any obvious performance issues when creating a large profile using the following `QA Debug` settings: 205 | - [ ] `Load all QA Links`, `Create 1000 Tabs`, `Create 1000 Bookmark Entries`, `Create 1000 History Entries` -------------------------------------------------------------------------------- /brave_testrun_generator.py: -------------------------------------------------------------------------------- 1 | from github import Github 2 | import argparse 3 | 4 | parser = argparse.ArgumentParser() 5 | parser.add_argument("-t", "--test", 6 | help="Test Mode, do not create Github issues") 7 | 8 | args = parser.parse_args() 9 | 10 | secret_file = open("github.secret", "r") 11 | token_string = secret_file.readline().rstrip("\n\r") 12 | 13 | g = Github(token_string, timeout=1000) 14 | rate = g.get_rate_limit() 15 | limit = rate.core.limit 16 | remaining = rate.core.remaining 17 | 18 | print("Rate Limit: " + str(limit)) 19 | print("Rate Remaining: " + str(remaining)) 20 | 21 | bc_repo = g.get_organization("brave").get_repo("brave-browser") 22 | ios_repo = g.get_organization("brave").get_repo("brave-ios") 23 | 24 | checklist = [] 25 | release_notes = [] 26 | mac_checklist = [] 27 | macarm64_checklist = [] 28 | win32_checklist = [] 29 | win64_checklist = [] 30 | linux_checklist = [] 31 | iPad_checklist = [] 32 | iPhone_checklist = [] 33 | iPhoneX_checklist = [] 34 | android_arm_checklist = [] 35 | android_tab_checklist = [] 36 | crypto_wallet_checklist = [] 37 | 38 | bc_milestone = {} 39 | for bcmilestone in bc_repo.get_milestones(state="open"): 40 | bc_milestone.update({bcmilestone.title: bcmilestone}) 41 | 42 | ios_milestone = {} 43 | for iosmilestone in ios_repo.get_milestones(state="open"): 44 | ios_milestone.update({iosmilestone.title: iosmilestone}) 45 | 46 | laptop_key = sorted(bc_milestone.keys()) 47 | ios_key = sorted(ios_milestone.keys()) 48 | 49 | def laptop_testruns(milestonever): 50 | 51 | wiki_laptop_file = open("WikiTemplate/Desktop/wikitemplate.md", "r") 52 | laptop_template = wiki_laptop_file.read() 53 | wiki_macOS_intel = open("WikiTemplate/Desktop/wikitemplate-macOS-x64.md", "r") 54 | macOS_x64 = wiki_macOS_intel.read() 55 | 56 | for issue in bc_repo.get_issues( 57 | milestone=bc_milestone[milestonever], sort="created", 58 | direction="asc", state="closed"): 59 | if("pull" not in issue.html_url): 60 | original_issue_title = issue.title 61 | issue_title = original_issue_title 62 | if(original_issue_title[0].islower()): 63 | lower = original_issue_title[0] 64 | upper = original_issue_title[0].upper() 65 | issue_title = original_issue_title.replace(lower, upper, 1) 66 | 67 | labels = issue.get_labels() 68 | label_names = [] 69 | 70 | for label in labels: 71 | label_names.append(label.name) 72 | if("release-notes/include" in label_names and 73 | "QA/No" not in label_names and 74 | "tests" not in label_names): 75 | output_line = " - " + issue_title + ".([#" +\ 76 | str(issue.number) + "](" + issue.html_url + "))" 77 | release_notes.append(output_line) 78 | 79 | if("QA/Yes" in label_names and "QA/No" not in label_names and 80 | "tests" not in label_names): 81 | output_line = " - [ ] " + issue_title + ".([#" +\ 82 | str(issue.number) + "](" + issue.html_url + "))" 83 | checklist.append(output_line) 84 | if("QA Pass-macOS-arm64" not in label_names and 85 | "OS/Windows" not in label_names and 86 | "OS/Linux" not in label_names and 87 | "QA/No" not in label_names and 88 | "tests" not in label_names): 89 | macarm64_checklist.append(output_line) 90 | 91 | if("QA Pass-Win64" not in label_names and 92 | "OS/macOS" not in label_names and 93 | "OS/Linux" not in label_names and 94 | "QA/No" not in label_names and 95 | "tests" not in label_names): 96 | win64_checklist.append(output_line) 97 | 98 | if("QA Pass-Linux" not in label_names and 99 | "OS/Windows" not in label_names and 100 | "OS/macOS" not in label_names and 101 | "QA/No" not in label_names and 102 | "tests" not in label_names): 103 | linux_checklist.append(output_line) 104 | 105 | print("\nRelease Notes ") 106 | for line in release_notes: 107 | print(line) 108 | print("") 109 | 110 | print("\nChecklist: ") 111 | for line in checklist: 112 | print(line) 113 | print("") 114 | 115 | print("\nMac Checklist (arm64):") 116 | print(laptop_template) 117 | print("") 118 | macarm64Title = "Manual test run on macOS (arm64) for " + milestonever 119 | macarm64List = ["OS/macOS-arm64", 120 | "release-notes/exclude", 121 | "tests", 122 | "QA/Yes", 123 | "OS/Desktop"] 124 | 125 | if args.test is None: 126 | bc_repo.create_issue(title=macarm64Title, 127 | body=laptop_template, 128 | milestone=bc_milestone[milestonever], 129 | labels=macarm64List) 130 | 131 | print("--------------------------------------------------------\n") 132 | 133 | print("Mac Checklist (x64):") 134 | print(macOS_x64) 135 | print("") 136 | macx64Title = "Manual test run on macOS (x64) for " + milestonever 137 | macx64List = ["OS/macOS", 138 | "release-notes/exclude", 139 | "tests", 140 | "QA/Yes", 141 | "OS/Desktop"] 142 | 143 | if args.test is None: 144 | bc_repo.create_issue(title=macx64Title, 145 | body=macOS_x64, 146 | milestone=bc_milestone[milestonever], 147 | labels=macx64List) 148 | 149 | print("--------------------------------------------------------\n") 150 | 151 | print("Win64 Checklist:") 152 | print(laptop_template) 153 | print("") 154 | winTitle = "Manual test run on Windows x64 for " + milestonever 155 | winList = ["OS/Windows", 156 | "release-notes/exclude", 157 | "tests", 158 | "QA/Yes", 159 | "OS/Desktop"] 160 | 161 | if args.test is None: 162 | bc_repo.create_issue(title=winTitle, 163 | body=laptop_template, 164 | milestone=bc_milestone[milestonever], 165 | labels=winList) 166 | 167 | print("--------------------------------------------------------\n") 168 | 169 | print("Linux Checklist:") 170 | print(laptop_template) 171 | print("") 172 | linTitle = "Manual test run on Linux for " + milestonever 173 | linList = ["OS/Linux", 174 | "release-notes/exclude", 175 | "tests", 176 | "QA/Yes", 177 | "OS/Desktop"] 178 | 179 | if args.test is None: 180 | bc_repo.create_issue(title=linTitle, 181 | body=laptop_template, 182 | milestone=bc_milestone[milestonever], 183 | labels=linList) 184 | 185 | return 0 186 | 187 | def laptop_CRminor_testruns(milestonever): 188 | 189 | wiki_laptop_CRminor = open("WikiTemplate/Desktop/Minor_CR_Bump/wikitemplate-minorCRbumpDesktop.md", "r") 190 | laptop_CRminor_template = wiki_laptop_CRminor.read() 191 | wiki_macOS_intel = open("WikiTemplate/Desktop/Minor_CR_Bump/wikitemplate-minorCRbump-macOS-x64.md", "r") 192 | macOS_x64 = wiki_macOS_intel.read() 193 | 194 | for issue in bc_repo.get_issues( 195 | milestone=bc_milestone[milestonever], sort="created", 196 | direction="asc", state="closed"): 197 | if("pull" not in issue.html_url): 198 | original_issue_title = issue.title 199 | issue_title = original_issue_title 200 | if(original_issue_title[0].islower()): 201 | lower = original_issue_title[0] 202 | upper = original_issue_title[0].upper() 203 | issue_title = original_issue_title.replace(lower, upper, 1) 204 | 205 | labels = issue.get_labels() 206 | label_names = [] 207 | 208 | for label in labels: 209 | label_names.append(label.name) 210 | if("release-notes/include" in label_names and 211 | "QA/No" not in label_names and 212 | "tests" not in label_names): 213 | output_line = " - " + issue_title + ".([#" +\ 214 | str(issue.number) + "](" + issue.html_url + "))" 215 | release_notes.append(output_line) 216 | 217 | if("QA/Yes" in label_names and "QA/No" not in label_names and 218 | "tests" not in label_names): 219 | output_line = " - [ ] " + issue_title + ".([#" +\ 220 | str(issue.number) + "](" + issue.html_url + "))" 221 | checklist.append(output_line) 222 | if("QA Pass-macOS-arm64" not in label_names and 223 | "OS/Windows" not in label_names and 224 | "OS/Linux" not in label_names and 225 | "QA/No" not in label_names and 226 | "tests" not in label_names): 227 | macarm64_checklist.append(output_line) 228 | 229 | if("QA Pass-Win64" not in label_names and 230 | "OS/macOS" not in label_names and 231 | "OS/Linux" not in label_names and 232 | "QA/No" not in label_names and 233 | "tests" not in label_names): 234 | win64_checklist.append(output_line) 235 | 236 | print("\nRelease Notes ") 237 | for line in release_notes: 238 | print(line) 239 | print("") 240 | 241 | print("\nMac Checklist (arm64):") 242 | print(laptop_CRminor_template) 243 | print("") 244 | macarm64Title = "Manual test run on macOS (arm64) for " + milestonever 245 | macarm64List = ["OS/macOS-arm64", 246 | "release-notes/exclude", 247 | "tests", 248 | "QA/Yes", 249 | "OS/Desktop"] 250 | 251 | if args.test is None: 252 | bc_repo.create_issue(title=macarm64Title, 253 | body=laptop_CRminor_template, 254 | milestone=bc_milestone[milestonever], 255 | labels=macarm64List) 256 | 257 | print("--------------------------------------------------------\n") 258 | 259 | print("Mac Checklist(x64):") 260 | print(macOS_x64) 261 | print("") 262 | macx64Title = "Manual test run on macOS (x64) for " + milestonever 263 | macx64List = ["OS/macOS", 264 | "release-notes/exclude", 265 | "tests", 266 | "QA/Yes", 267 | "OS/Desktop"] 268 | 269 | if args.test is None: 270 | bc_repo.create_issue(title=macx64Title, 271 | body=macOS_x64, 272 | milestone=bc_milestone[milestonever], 273 | labels=macx64List) 274 | 275 | print("--------------------------------------------------------\n") 276 | 277 | print("Win64 Checklist:") 278 | print(laptop_CRminor_template) 279 | print("") 280 | winTitle = "Manual test run on Windows x64 for " + milestonever 281 | winList = ["OS/Windows", 282 | "release-notes/exclude", 283 | "tests", 284 | "QA/Yes", 285 | "OS/Desktop"] 286 | 287 | if args.test is None: 288 | bc_repo.create_issue(title=winTitle, 289 | body=laptop_CRminor_template, 290 | milestone=bc_milestone[milestonever], 291 | labels=winList) 292 | 293 | print("--------------------------------------------------------\n") 294 | 295 | print("Linux Checklist:") 296 | print(laptop_CRminor_template) 297 | print("") 298 | linTitle = "Manual test run on Linux for " + milestonever 299 | linList = ["OS/Linux", 300 | "release-notes/exclude", 301 | "tests", 302 | "QA/Yes", 303 | "OS/Desktop"] 304 | 305 | if args.test is None: 306 | bc_repo.create_issue(title=linTitle, 307 | body=laptop_CRminor_template, 308 | milestone=bc_milestone[milestonever], 309 | labels=linList) 310 | 311 | return 0 312 | 313 | def crypto_desktop(milestonever): 314 | 315 | wiki_laptop_crypto = open("WikiTemplate/Crypto/wikitemplate-cryptoDesktop.md", "r") 316 | laptop_crypto_template = wiki_laptop_crypto.read() 317 | 318 | for issue in bc_repo.get_issues( 319 | milestone=bc_milestone[milestonever], sort="created", 320 | direction="asc", state="closed"): 321 | if("pull" not in issue.html_url): 322 | original_issue_title = issue.title 323 | issue_title = original_issue_title 324 | if(original_issue_title[0].islower()): 325 | lower = original_issue_title[0] 326 | upper = original_issue_title[0].upper() 327 | issue_title = original_issue_title.replace(lower, upper, 1) 328 | 329 | print(laptop_crypto_template) 330 | print("") 331 | 332 | DesktopCryptoTitle = "Desktop Crypto Wallet Regression test run for " + milestonever 333 | DesktopCryptoList = ["OS/Windows", 334 | "release-notes/exclude", 335 | "feature/web3/wallet", 336 | "tests", 337 | "QA/Yes", 338 | "OS/Desktop"] 339 | 340 | if args.test is None: 341 | bc_repo.create_issue(title=DesktopCryptoTitle, 342 | body=laptop_crypto_template, 343 | milestone=bc_milestone[milestonever], 344 | labels=DesktopCryptoList) 345 | 346 | return 0 347 | 348 | def android_testruns(milestonever): 349 | 350 | wiki_android_file = open("WikiTemplate/Android/wikitemplate-android.md", "r") 351 | android_template = wiki_android_file.read() 352 | 353 | for issue in bc_repo.get_issues( 354 | milestone=bc_milestone[milestonever], 355 | sort="created", 356 | direction="asc", 357 | state="closed"): 358 | if("pull" not in issue.html_url): 359 | original_issue_title = issue.title 360 | issue_title = original_issue_title 361 | if(original_issue_title[0].islower()): 362 | lower = original_issue_title[0] 363 | upper = original_issue_title[0].upper() 364 | issue_title = original_issue_title.replace(lower, upper, 1) 365 | 366 | labels = issue.get_labels() 367 | label_names = [] 368 | 369 | for label in labels: 370 | label_names.append(label.name) 371 | if("QA/Yes" in label_names and 372 | "OS/Android" in label_names and 373 | "tests" not in label_names and 374 | "QA/No" not in label_names): 375 | output_line = " - " + issue_title + ".([#" +\ 376 | str(issue.number) + "])" + issue.html_url + "))" 377 | release_notes.append(output_line) 378 | 379 | if("QA/Yes" in label_names and "QA/No" not in label_names): 380 | output_line = " - [ ] " + issue_title + ". ([#" +\ 381 | str(issue.number) + "](" + issue.html_url + "))" 382 | checklist.append(output_line) 383 | checklist.append(issue.html_url) 384 | if("QA Pass - Android ARM" not in label_names and 385 | "checked by qa" not in label_names and 386 | "tests" not in label_names and 387 | "x86" not in label_names and 388 | "tablet-specific" not in label_names): 389 | android_arm_checklist.append(output_line) 390 | 391 | 392 | if("QA Pass - Android Tab" not in label_names and 393 | "checked by qa" not in label_names and 394 | "tests" not in label_names and 395 | "x86" not in label_names and 396 | "phone-specific" not in label_names): 397 | android_tab_checklist.append(output_line) 398 | 399 | print("\nRelease Notes:") 400 | for line in release_notes: 401 | print(line) 402 | print("") 403 | 404 | print("\nChecklist:") 405 | for line in checklist: 406 | print(line) 407 | print("") 408 | 409 | print("\nAndroid ARM Checklist:") 410 | print(android_template) 411 | print("") 412 | AndroidARMtitle = "Manual test run on Android ARM for " + milestonever 413 | AndroidARMlist = ["ARM", 414 | "release-notes/exclude", 415 | "tests", 416 | "QA/Yes", 417 | "OS/Android"] 418 | 419 | if args.test is None: 420 | bc_repo.create_issue(title=AndroidARMtitle, 421 | body=android_template, 422 | milestone=bc_milestone[milestonever], 423 | labels=AndroidARMlist) 424 | 425 | print("--------------------------------------------------------\n") 426 | 427 | print("Android Tab Checklist:") 428 | print(android_template) 429 | print("") 430 | AndroidTabtitle = "Manual test run on Android Tab for " + milestonever 431 | AndroidTablist = ["ARM", 432 | "release-notes/exclude", 433 | "tests", 434 | "QA/Yes", 435 | "OS/Android"] 436 | 437 | if args.test is None: 438 | bc_repo.create_issue(title=AndroidTabtitle, 439 | body=android_template, 440 | milestone=bc_milestone[milestonever], 441 | labels=AndroidTablist) 442 | 443 | print("--------------------------------------------------------\n") 444 | 445 | return 0 446 | 447 | def android_CRminor_testruns(milestonever): 448 | 449 | wiki_android_CRminor = open("WikiTemplate/Android/wikitemplate-minorCRbumpAndroid.md", "r") 450 | android_CRminor_template = wiki_android_CRminor.read() 451 | 452 | for issue in bc_repo.get_issues( 453 | milestone=bc_milestone[milestonever], 454 | sort="created", 455 | direction="asc", 456 | state="closed"): 457 | if("pull" not in issue.html_url): 458 | original_issue_title = issue.title 459 | issue_title = original_issue_title 460 | if(original_issue_title[0].islower()): 461 | lower = original_issue_title[0] 462 | upper = original_issue_title[0].upper() 463 | issue_title = original_issue_title.replace(lower, upper, 1) 464 | 465 | labels = issue.get_labels() 466 | label_names = [] 467 | 468 | for label in labels: 469 | label_names.append(label.name) 470 | if("QA/Yes" in label_names and 471 | "OS/Android" in label_names and 472 | "tests" not in label_names and 473 | "QA/No" not in label_names): 474 | output_line = " - " + issue_title + ".([#" +\ 475 | str(issue.number) + "])" + issue.html_url + "))" 476 | release_notes.append(output_line) 477 | 478 | if("QA/Yes" in label_names and "QA/No" not in label_names): 479 | output_line = " - [ ] " + issue_title + ". ([#" +\ 480 | str(issue.number) + "](" + issue.html_url + "))" 481 | checklist.append(output_line) 482 | checklist.append(issue.html_url) 483 | if("QA Pass - Android ARM" not in label_names and 484 | "checked by qa" not in label_names and 485 | "tests" not in label_names and 486 | "x86" not in label_names and 487 | "tablet-specific" not in label_names): 488 | android_arm_checklist.append(output_line) 489 | 490 | if("QA Pass - Android Tab" not in label_names and 491 | "checked by qa" not in label_names and 492 | "tests" not in label_names and 493 | "x86" not in label_names and 494 | "phone-specific" not in label_names): 495 | android_tab_checklist.append(output_line) 496 | 497 | print("\nRelease Notes:") 498 | for line in release_notes: 499 | print(line) 500 | print("") 501 | 502 | print("\nChecklist:") 503 | for line in checklist: 504 | print(line) 505 | print("") 506 | 507 | print("\nAndroid ARM Checklist:") 508 | print(android_CRminor_template) 509 | print("") 510 | AndroidARMtitle = "Manual test run on Android ARM for " + milestonever 511 | AndroidARMlist = ["ARM", 512 | "release-notes/exclude", 513 | "tests", 514 | "QA/Yes", 515 | "OS/Android"] 516 | 517 | if args.test is None: 518 | bc_repo.create_issue(title=AndroidARMtitle, 519 | body=android_CRminor_template, 520 | milestone=bc_milestone[milestonever], 521 | labels=AndroidARMlist) 522 | 523 | print("--------------------------------------------------------\n") 524 | 525 | print("Android Tab Checklist:") 526 | print(android_CRminor_template) 527 | print("") 528 | AndroidTabtitle = "Manual test run on Android Tab for " + milestonever 529 | AndroidTablist = ["ARM", 530 | "release-notes/exclude", 531 | "tests", 532 | "QA/Yes", 533 | "OS/Android"] 534 | 535 | if args.test is None: 536 | bc_repo.create_issue(title=AndroidTabtitle, 537 | body=android_CRminor_template, 538 | milestone=bc_milestone[milestonever], 539 | labels=AndroidTablist) 540 | 541 | 542 | print("--------------------------------------------------------\n") 543 | 544 | return 0 545 | 546 | def crypto_android(milestonever): 547 | 548 | 549 | wiki_android_crypto = open("WikiTemplate/Crypto/wikitemplate-cryptoAndroid.md", "r") 550 | android_crypto_template = wiki_android_crypto.read() 551 | 552 | for issue in bc_repo.get_issues( 553 | milestone=bc_milestone[milestonever], 554 | sort="created", 555 | direction="asc", 556 | state="closed"): 557 | if("pull" not in issue.html_url): 558 | original_issue_title = issue.title 559 | issue_title = original_issue_title 560 | if(original_issue_title[0].islower()): 561 | lower = original_issue_title[0] 562 | upper = original_issue_title[0].upper() 563 | issue_title = original_issue_title.replace(lower, upper, 1) 564 | 565 | print("Crypto Wallet Android Checklist:") 566 | print(android_crypto_template) 567 | print("") 568 | AndroidCryptotitle = "Android Crypto Wallet Regression test run for " + milestonever 569 | AndroidCryptolist = ["ARM", 570 | "release-notes/exclude", 571 | "tests", 572 | "feature/web3/wallet", 573 | "QA/Yes", 574 | "OS/Android"] 575 | 576 | if args.test is None: 577 | bc_repo.create_issue(title=AndroidCryptotitle, 578 | body=android_crypto_template, 579 | milestone=bc_milestone[milestonever], 580 | labels=AndroidCryptolist) 581 | 582 | return 0 583 | 584 | def iOS_testruns(): 585 | 586 | wikitemplate_ios = open("WikiTemplate/iOS/wikitemplate-ios.md", "r") 587 | ios_template = wikitemplate_ios.read() 588 | ios_key = sorted(ios_milestone.keys())[0] 589 | 590 | 591 | for issue in ios_repo.get_issues(milestone=ios_milestone[ios_key], 592 | sort="created", 593 | direction="asc", 594 | state="closed"): 595 | 596 | if("pull" not in issue.html_url): 597 | original_issue_title = issue.title 598 | issue_title = original_issue_title 599 | if(original_issue_title[0].islower()): 600 | lower = original_issue_title[0] 601 | upper = original_issue_title[0].upper() 602 | issue_title = original_issue_title.replace(lower, upper, 1) 603 | 604 | labels = issue.get_labels() 605 | label_names = [] 606 | for label in labels: 607 | label_names.append(label.name) 608 | if("release-notes/include" in label_names and 609 | "QA/No" in label_names and 610 | "tests" not in label_names): 611 | output_line = " - " + issue_title + ". ([#" +\ 612 | str(issue.number) + "](" + issue.html_url + "))" 613 | release_notes.append(output_line) 614 | release_notes.append(issue.html_url) 615 | #print(release_notes) 616 | 617 | if("QA/Yes" in label_names and "QA/No" not in label_names): 618 | output_line = " - [ ] " + issue_title + ". ([#" +\ 619 | str(issue.number) + "](" + issue.html_url + "))" 620 | checklist.append(output_line) 621 | checklist.append(issue.html_url) 622 | if("QA Pass - iPad" not in label_names and 623 | "iPhone" not in label_names and 624 | "tests" not in label_names): 625 | iPad_checklist.append(output_line) 626 | 627 | if("QA Pass - iPhone" not in label_names and 628 | "iPad" not in label_names and 629 | "tests" not in label_names): 630 | iPhone_checklist.append(output_line) 631 | 632 | if("QA Pass - iPhone X" not in label_names and 633 | "iPad" not in label_names and 634 | "tests" not in label_names): 635 | iPhoneX_checklist.append(output_line) 636 | 637 | print("\nRelease Notes:") 638 | print(release_notes) 639 | for line in release_notes: 640 | line += line +"\n" 641 | print(line) 642 | print("") 643 | 644 | print("\niPad Checklist:") 645 | print(ios_template) 646 | print("") 647 | iPad_Title = "Manual test run for " + ios_key +\ 648 | " on iPad" 649 | iPad_List = ["ipad", 650 | "release-notes/exclude", 651 | "tests", 652 | "QA/Yes"] 653 | 654 | if args.test is None: 655 | ios_repo.create_issue(title=iPad_Title, 656 | body=ios_template, 657 | milestone=ios_milestone[ios_key], 658 | labels=iPad_List) 659 | 660 | print("--------------------------------------------------------\n") 661 | 662 | print("iPhone Checklist:") 663 | print(ios_template) 664 | print("") 665 | iPhone_Title = "Manual test run for " + ios_key +\ 666 | " on iPhone" 667 | iPhone_List = ["iPhone", 668 | "release-notes/exclude", 669 | "tests", 670 | "QA/Yes"] 671 | 672 | if args.test is None: 673 | ios_repo.create_issue(title=iPhone_Title, 674 | body=ios_template, 675 | milestone=ios_milestone[ios_key], 676 | labels=iPhone_List) 677 | 678 | print("--------------------------------------------------------\n") 679 | 680 | print("iPhone X Checklist:") 681 | print(ios_template) 682 | print("") 683 | iPhoneX_Title = "Manual test run for " + ios_key +\ 684 | " on iPhone X" 685 | iPhoneX_List = ["iPhone", 686 | "release-notes/exclude", 687 | "tests", 688 | "QA/Yes"] 689 | 690 | if args.test is None: 691 | ios_repo.create_issue(title=iPhoneX_Title, 692 | body=ios_template, 693 | milestone=ios_milestone[ios_key], 694 | labels=iPhoneX_List) 695 | 696 | return 697 | 698 | def crypto_iOS(): 699 | 700 | wiki_iOS_crypto = open("WikiTemplate/Crypto/wikitemplate-cryptoiOS.md", "r") 701 | iOS_crypto_template = wiki_iOS_crypto.read() 702 | ios_key = sorted(ios_milestone.keys())[0] 703 | 704 | 705 | for issue in ios_repo.get_issues(milestone=ios_milestone[ios_key], 706 | sort="created", 707 | direction="asc", 708 | state="closed"): 709 | if("pull" not in issue.html_url): 710 | original_issue_title = issue.title 711 | issue_title = original_issue_title 712 | if(original_issue_title[0].islower()): 713 | lower = original_issue_title[0] 714 | upper = original_issue_title[0].upper() 715 | issue_title = original_issue_title.replace(lower, upper, 1) 716 | 717 | print(iOS_crypto_template) 718 | print("") 719 | CyprotiOS_Title = "iOS Crypto Wallet Regression test run for " + ios_key +\ 720 | " on iPhone" 721 | CryptoiOS_List = ["iphone", 722 | "release-notes/exclude", 723 | "tests", 724 | "Epic: Brave Wallet", 725 | "QA/Yes"] 726 | 727 | if args.test is None: 728 | ios_repo.create_issue(title=CyprotiOS_Title, 729 | body=iOS_crypto_template, 730 | milestone=ios_milestone[ios_key], 731 | labels=CryptoiOS_List) 732 | 733 | return 0 734 | 735 | def tor_testruns(tor_rel): 736 | 737 | macOS_intel_wiki = open("WikiTemplate/Tor/wikitemplate-tor-macOS(Intel).md", "r") 738 | macOS_intel_template = macOS_intel_wiki.read() 739 | macOS_arm64_wiki = open("WikiTemplate/Tor/wikitemplate-tor-macOS(arm64).md", "r") 740 | macOS_arm64_template = macOS_arm64_wiki.read() 741 | win_tor_wiki = open("WikiTemplate/Tor/wikitemplate-tor-Windows.md", "r") 742 | windows_template = win_tor_wiki.read() 743 | linux_tor_wiki = open("WikiTemplate/Tor/wikitemplate-tor-Linux.md", "r") 744 | linux_template = linux_tor_wiki.read() 745 | 746 | print("\nMac Checklist (Intel):") 747 | print(macOS_intel_template) 748 | print("") 749 | macTitle = "Manual test run on macOS (Intel) for " + tor_rel 750 | macList = ["OS/macOS", 751 | "release-notes/exclude", 752 | "tests", 753 | "QA/Yes", 754 | "OS/Desktop", 755 | "feature/tor"] 756 | 757 | if args.test is None: 758 | bc_repo.create_issue(title=macTitle, 759 | body=macOS_intel_template, 760 | milestone=bc_milestone[tor_rel], 761 | labels=macList) 762 | 763 | print("--------------------------------------------------------\n") 764 | 765 | print("Mac Checklist(arm64):") 766 | print(macOS_arm64_template) 767 | print("") 768 | macarm64Title = "Manual test run on macOS (arm64) for " + tor_rel 769 | macarm64List = ["OS/macOS-arm64", 770 | "release-notes/exclude", 771 | "tests", 772 | "QA/Yes", 773 | "OS/Desktop", 774 | "feature/tor"] 775 | 776 | if args.test is None: 777 | bc_repo.create_issue(title=macarm64Title, 778 | body=macOS_arm64_template, 779 | milestone=bc_milestone[tor_rel], 780 | labels=macarm64List) 781 | 782 | print("--------------------------------------------------------\n") 783 | 784 | print("Win64 Checklist:") 785 | print(windows_template) 786 | print("") 787 | winTitle = "Manual test run on Windows x64 & x86 for " + tor_rel 788 | winList = ["OS/Windows", 789 | "release-notes/exclude", 790 | "tests", 791 | "QA/Yes", 792 | "OS/Desktop", 793 | "feature/tor"] 794 | 795 | if args.test is None: 796 | bc_repo.create_issue(title=winTitle, 797 | body=windows_template, 798 | milestone=bc_milestone[tor_rel], 799 | labels=winList) 800 | 801 | print("--------------------------------------------------------\n") 802 | 803 | print("Linux Checklist:") 804 | print(linux_template) 805 | print("") 806 | linTitle = "Manual test run on Linux for " + tor_rel 807 | linList = ["OS/Linux", 808 | "release-notes/exclude", 809 | "tests", 810 | "QA/Yes", 811 | "OS/Desktop", 812 | "feature/tor"] 813 | 814 | if args.test is None: 815 | bc_repo.create_issue(title=linTitle, 816 | body=linux_template, 817 | milestone=bc_milestone[tor_rel], 818 | labels=linList) 819 | 820 | return 0 821 | 822 | def ipfs_testruns(ipfs_rel): 823 | 824 | ipfs_wiki = open("WikiTemplate/IPFS/wikitemplate-IPFS.md", "r") 825 | ipfs_template = ipfs_wiki.read() 826 | 827 | print("\nMac Checklist (Intel/arm64):") 828 | print(ipfs_template) 829 | print("") 830 | macTitle = "Manual test run on macOS (Intel/arm64) for " + ipfs_rel 831 | macList = ["OS/macOS", 832 | "release-notes/exclude", 833 | "tests", 834 | "QA/Yes", 835 | "OS/Desktop", 836 | "feature/web3/ipfs"] 837 | 838 | if args.test is None: 839 | bc_repo.create_issue(title=macTitle, 840 | body=ipfs_template, 841 | milestone=bc_milestone[ipfs_rel], 842 | labels=macList) 843 | 844 | print("--------------------------------------------------------\n") 845 | 846 | print("Win64 Checklist:") 847 | print(ipfs_template) 848 | print("") 849 | winTitle = "Manual test run on Windows x64 & x86 for " + ipfs_rel 850 | winList = ["OS/Windows", 851 | "release-notes/exclude", 852 | "tests", 853 | "QA/Yes", 854 | "OS/Desktop", 855 | "feature/web3/ipfs"] 856 | 857 | if args.test is None: 858 | bc_repo.create_issue(title=winTitle, 859 | body=ipfs_template, 860 | milestone=bc_milestone[ipfs_rel], 861 | labels=winList) 862 | 863 | print("--------------------------------------------------------\n") 864 | 865 | print("Linux Checklist:") 866 | print(ipfs_template) 867 | print("") 868 | linTitle = "Manual test run on Linux for " + ipfs_rel 869 | linList = ["OS/Linux", 870 | "release-notes/exclude", 871 | "tests", 872 | "QA/Yes", 873 | "OS/Desktop", 874 | "feature/web3/ipfs"] 875 | 876 | if args.test is None: 877 | bc_repo.create_issue(title=linTitle, 878 | body=ipfs_template, 879 | milestone=bc_milestone[ipfs_rel], 880 | labels=linList) 881 | 882 | return 0 883 | 884 | 885 | print("\n#######################################################################" 886 | "###################################################") 887 | print("\n For Desktop or Android minor CR bump only use the basic checks selection to " 888 | "generate testruns\n") 889 | 890 | length = 0 891 | print("Current open milestones for Desktop/Android") 892 | while length < len(laptop_key): 893 | print(str(length+1) + ". " + sorted(bc_milestone.keys())[length]) 894 | length += 1 895 | 896 | ioslength=0 897 | print("\nCurrent open milestones for iOS") 898 | while ioslength < len(ios_key): 899 | print(str(ioslength+1) + ". " + sorted(ios_milestone.keys())[ioslength]) 900 | ioslength += 1 901 | 902 | print("\nNOTE:") 903 | print("\n For Tor Release make sure you type \"Tor\" or \"tor\" instead " 904 | "of the number") 905 | print("\n For IPFS Release make sure you type \"IPFS/KUBO \" or \"ipfs/kubo\" instead " 906 | "of the number") 907 | 908 | print("#######################################################################" 909 | "###################################################") 910 | 911 | header = print("\nCreate test runs for:\n") 912 | laptop = print("1. Desktop Release (Full manual pass)") 913 | #laptop_hf = print("2. Desktop Release (Reduced manual pass for Hotfix)") 914 | laptop_CRminor = print("2. Desktop Release (Basic checks for" 915 | " hotfix/minor Chromium bump)") 916 | android = print("3. Android Release (Full manual pass)") 917 | #android_hf = print("5. Android Release (Reduced manual pass for Hotfix)") 918 | android_hf = print("4. Android Release (Basic checks for" 919 | " hotfix/minor Chromium bump)") 920 | ios = print("5. iOS Release") 921 | cyrpto_desktop = print("6. Crypto Wallet - Desktop") 922 | cyrpto_android = print("7. Crypto Wallet - Android") 923 | cyrpto_ios = print("8. Crypto Wallet - iOS") 924 | tor = print("9. Tor Release") 925 | ipfs = print("10. IPFS Release") 926 | 927 | select_checklist = input("\nChoose the platform for which you want to" + 928 | " generate the test run: ") 929 | 930 | if(select_checklist == "1"): 931 | print("\nGenerating test runs for " + 932 | str(sorted(bc_milestone.keys())[0])) 933 | laptop_testruns(sorted(bc_milestone.keys())[0]) 934 | elif(select_checklist == "2"): 935 | print("\nGenerating test runs for " + 936 | str(sorted(bc_milestone.keys())[0])) 937 | laptop_CRminor_testruns(sorted(bc_milestone.keys())[0]) 938 | elif(select_checklist == "3"): 939 | print("\nGenerating test runs for " + 940 | str(sorted(bc_milestone.keys())[0])) 941 | android_testruns(sorted(bc_milestone.keys())[0]) 942 | elif(select_checklist == "4"): 943 | print("\nGenerating test runs for " + 944 | str(sorted(bc_milestone.keys())[0])) 945 | android_CRminor_testruns(sorted(bc_milestone.keys())[0]) 946 | elif(select_checklist == "5"): 947 | generate_ios_test = print("\nGenerating test runs for iOS ", 948 | sorted(ios_milestone.keys())[0]) 949 | iOS_testruns() 950 | elif(select_checklist == "6"): 951 | generate_ios_test = print("\nGenerating Desktop Crypto Wallet Test run for", 952 | sorted(bc_milestone.keys())[0]) 953 | crypto_desktop(sorted(bc_milestone.keys())[0]) 954 | elif(select_checklist == "7"): 955 | generate_ios_test = print("\nGenerating Android Crypto Wallet Test run for", 956 | sorted(bc_milestone.keys())[0]) 957 | crypto_android(sorted(bc_milestone.keys())[0]) 958 | elif(select_checklist == "8"): 959 | generate_ios_test = print("\nGenerating iOS Crypto Wallet Test run for", 960 | sorted(ios_milestone.keys())[0]) 961 | crypto_iOS() 962 | elif(select_checklist == "Tor" or select_checklist == "tor"): 963 | tormilestone = [s for s in bc_milestone if "Tor" in s] 964 | if (len(tormilestone) == 0): 965 | torkey = "" 966 | print("No Tor milestone exists. Please create milestone " 967 | "and then generate test runs") 968 | else: 969 | torkey = tormilestone[0] 970 | generate_ios_test = print("\nGenerating test runs for Tor", 971 | (tormilestone)[0]) 972 | tor_testruns(torkey) 973 | elif(select_checklist == "IPFS" or select_checklist == "ipfs" 974 | or select_checklist == "KUBO" or select_checklist == "kubo"): 975 | ipfsmilestone = [i for i in bc_milestone if "IPFS" in i] 976 | if (len(ipfsmilestone) == 0): 977 | ipfskey = "" 978 | print("No IPFS milestone exists. Please create milestone " 979 | "and then generate test runs") 980 | else: 981 | ipfskey = ipfsmilestone[0] 982 | generate_ipfs_test = print("\nGenerating test runs for", 983 | (ipfsmilestone)[0]) 984 | ipfs_testruns(ipfskey) 985 | else: 986 | print("Incorrect selection. " + select_checklist + " is not a valid input\n") 987 | exit() 988 | 989 | -------------------------------------------------------------------------------- /braveautogen-pre-release-only.py: -------------------------------------------------------------------------------- 1 | from github import Github 2 | import argparse 3 | 4 | parser = argparse.ArgumentParser() 5 | parser.add_argument("-t", "--test", help="Test Mode, do not create Github issues") 6 | 7 | args = parser.parse_args() 8 | 9 | secret_file = open('github.secret', 'r') 10 | token_string = secret_file.readline().rstrip("\n\r") 11 | 12 | g = Github(token_string, timeout=1000) 13 | rate = g.get_rate_limit() 14 | limit = rate.rate.limit 15 | remaining = rate.rate.remaining 16 | 17 | print("Rate Limit: " + str(limit)) 18 | print("Rate Remaining: " + str(remaining)) 19 | 20 | repo = g.get_organization("brave").get_repo("browser-laptop") 21 | 22 | milestone_dictionary = {} 23 | for milestone in repo.get_milestones(state="open"): 24 | milestone_dictionary.update({milestone.title:milestone}) 25 | 26 | key = sorted(milestone_dictionary.keys())[0] 27 | print(key) 28 | 29 | checklist = [] 30 | release_notes = [] 31 | exclusion_list = [] 32 | mac_checklist = [] 33 | win32_checklist = [] 34 | win64_checklist = [] 35 | linux_checklist = [] 36 | 37 | for issue in repo.get_issues(milestone=milestone_dictionary[key], state="closed"): 38 | if('pull' not in issue.html_url): 39 | original_issue_title = issue.title 40 | issue_title = original_issue_title 41 | if(original_issue_title[0].islower()): 42 | lower = original_issue_title[0] 43 | upper = original_issue_title[0].upper() 44 | issue_title = original_issue_title.replace(lower, upper, 1) 45 | 46 | labels = issue.get_labels() 47 | label_names = [] 48 | for label in labels: 49 | label_names.append(label.name) 50 | if('release-notes/include' in label_names): 51 | output_line = ' - ' + issue_title + '. ([#' + str(issue.number) + '](' + issue.html_url + '))' 52 | release_notes.append(output_line) 53 | 54 | if('QA/test-plan-specified' in label_names and 'QA/no-qa-needed' not in label_names): 55 | output_line = ' - [ ] ' + issue_title + '. ([#' + str(issue.number) + '](' + issue.html_url + '))' 56 | checklist.append(output_line) 57 | checklist.append(issue.html_url) 58 | if('QA/checked-macOS' not in label_names and 'QA/checked' not in label_names and 'OS/Windows' not in label_names and 'OS/unix-like/linux' not in label_names): 59 | mac_checklist.append(output_line) 60 | 61 | if('QA/checked-Win64' not in label_names and 'OS/macOS' not in label_names and 'OS/unix-like/linux' not in label_names): 62 | win64_checklist.append(output_line) 63 | 64 | if('QA/checked-Linux' not in label_names and 'OS/Windows' not in label_names and 'OS/macOS' not in label_names): 65 | linux_checklist.append(output_line) 66 | 67 | else: 68 | output_line = ' - [ ] ' + issue_title + '. ([#' + str(issue.number) + '](' + issue.html_url + '))' 69 | exclusion_list.append(output_line) 70 | exclusion_list.append(issue.html_url) 71 | 72 | print("Release Notes:") 73 | for line in release_notes: 74 | print(line) 75 | print("") 76 | 77 | print("Checklist:") 78 | for line in checklist: 79 | print(line) 80 | print("") 81 | 82 | print("Exclusion List:") 83 | for line in exclusion_list: 84 | print(line) 85 | print("") 86 | 87 | print("Mac Checklist:") 88 | bigline = "## Per release specialty tests\n" 89 | for line in mac_checklist: 90 | bigline += line + "\n" 91 | print(bigline) 92 | print("") 93 | mactitle = "Per-release specialty test run on OS X for " + key 94 | maclist = ['OS/macOS', 'release-notes/exclude', 'tests'] 95 | 96 | if args.test is None: 97 | repo.create_issue(title=mactitle,body=bigline,assignee="LaurenWags",milestone=milestone_dictionary[key] ,labels=maclist) 98 | 99 | print("Win64 Checklist:") 100 | bigline = "## Per release specialty tests\n" 101 | for line in win64_checklist: 102 | bigline += line + "\n" 103 | print(bigline) 104 | print("") 105 | wintitle = "Per-release specialty test run on Windows x64 for " + key 106 | winlist = ['OS/Windows', 'release-notes/exclude', 'tests'] 107 | 108 | if args.test is None: 109 | repo.create_issue(title=wintitle,body=bigline,assignee="srirambv",milestone=milestone_dictionary[key] ,labels=winlist) 110 | 111 | print("Linux Checklist:") 112 | bigline = "## Per release specialty tests\n" 113 | for line in linux_checklist: 114 | bigline += line + "\n" 115 | print(bigline) 116 | print("") 117 | lintitle = "Per-release specialty test run on Linux for " + key 118 | linlist = ['OS/unix-like/linux', 'release-notes/exclude', 'tests'] 119 | 120 | if args.test is None: 121 | repo.create_issue(title=lintitle,body=bigline,assignee="kjozwiak",milestone=milestone_dictionary[key] ,labels=linlist) 122 | -------------------------------------------------------------------------------- /changelog.py: -------------------------------------------------------------------------------- 1 | from github import Github 2 | import argparse 3 | 4 | parser = argparse.ArgumentParser() 5 | parser.add_argument("-t", "--test", 6 | help="Test Mode, do not create Github issues") 7 | 8 | args = parser.parse_args() 9 | 10 | secret_file = open("github.secret", "r") 11 | token_string = secret_file.readline().rstrip("\n\r") 12 | 13 | g = Github(token_string, timeout=1000) 14 | rate = g.get_rate_limit() 15 | limit = rate.rate.limit 16 | remaining = rate.rate.remaining 17 | 18 | print("Connecting to GitHub") 19 | print("Fetching Data") 20 | 21 | laptop_repo = g.get_organization("brave").get_repo("brave-browser") 22 | ios_repo = g.get_organization("brave").get_repo("brave-ios") 23 | android_repo = g.get_organization("brave").get_repo("browser-android-tabs") 24 | 25 | changelog = [] 26 | crash_list = [] 27 | general_list = [] 28 | privacy_list = [] 29 | regression_list = [] 30 | rewards_list = [] 31 | shields_list = [] 32 | sync_list = [] 33 | webcompat_list = [] 34 | iPad_list = [] 35 | iPhone_list = [] 36 | android_list = [] 37 | 38 | laptop_milestone = {} 39 | for laptopmilestone in laptop_repo.get_milestones(state="open"): 40 | laptop_milestone.update({laptopmilestone.title: laptopmilestone}) 41 | 42 | ios_milestone = {} 43 | for iosmilestone in ios_repo.get_milestones(state="open"): 44 | ios_milestone.update({iosmilestone.title: iosmilestone}) 45 | 46 | android_milestone = {} 47 | for androidmilestone in android_repo.get_milestones(state="open"): 48 | android_milestone.update({androidmilestone.title: androidmilestone}) 49 | 50 | laptop_key = sorted(laptop_milestone.keys()) 51 | key1 = sorted(laptop_milestone.keys())[0] 52 | key2 = sorted(laptop_milestone.keys())[1] 53 | key3 = sorted(laptop_milestone.keys())[2] 54 | key4 = sorted(laptop_milestone.keys())[3] 55 | key5 = sorted(laptop_milestone.keys())[4] 56 | 57 | 58 | def laptop_changelog(mlsver): 59 | 60 | for issue in laptop_repo.get_issues(milestone=laptop_milestone[mlsver], 61 | sort="created", direction="asc", 62 | state="closed"): 63 | if "pull" not in issue.html_url: 64 | original_issue_title = issue.title 65 | issue_title = original_issue_title 66 | if original_issue_title[0].islower(): 67 | lower = original_issue_title[0] 68 | upper = original_issue_title[0].upper() 69 | issue_title = original_issue_title.replace(lower, upper, 1) 70 | 71 | labels = issue.get_labels() 72 | label_names = [] 73 | 74 | for label in labels: 75 | label_names.append(label.name) 76 | if "crash" in label_names and "crash/webview" in label_names: 77 | crash_line = " - " +\ 78 | issue_title + ".(#" + str(issue.number) + ")" 79 | crash_list.append(crash_line) 80 | if "crash" not in label_names\ 81 | and "crash/webview" not in label_names\ 82 | and "webcompat" not in label_names\ 83 | and "audio" not in label_names\ 84 | and "feature/video" not in label_names\ 85 | and "regression" not in label_names\ 86 | and "privacy/connect" not in label_names\ 87 | and "privacy" not in label_names\ 88 | and "privacy/feature" not in label_names\ 89 | and "feature/sync" not in label_names\ 90 | and "feature/tor/guest-semantics" not in label_names\ 91 | and "feature/tor" not in label_names\ 92 | and "feature/shields" not in label_names\ 93 | and "feature/tor/leakproofing" not in label_names\ 94 | and "feature/shields/panel" not in label_names\ 95 | and "feature/private-browsing" not in label_names\ 96 | and "feature/rewards" not in label_names\ 97 | and "privacy/tracking" not in label_names\ 98 | and "feature/shields/!scripts" not in label_names\ 99 | and "feature/shields/adblock" not in label_names\ 100 | and "feature/shields/webcompat" not in label_names\ 101 | and "feature/shields/fingerprint" not in label_names: 102 | general_line = " - " +\ 103 | issue_title + ".(#" + str(issue.number) + ")" 104 | general_list.append(general_line) 105 | if "feature/tor/guest-semantics" in label_names\ 106 | or "feature/tor/leakproofing" in label_names\ 107 | or "feature/tor" in label_names\ 108 | or "feature/private-browsing" in label_names\ 109 | or "privacy/connect" in label_names\ 110 | or "privacy" in label_names\ 111 | or "privacy/feature" in label_names\ 112 | or "privacy/tracking" in label_names: 113 | privacy_line = " - " +\ 114 | issue_title + ".(#" + str(issue.number) + ")" 115 | privacy_list.append(privacy_line) 116 | if "feature/rewards" in label_names: 117 | rewards_line = " - " +\ 118 | issue_title + ".(#" + str(issue.number) + ")" 119 | rewards_list.append(rewards_line) 120 | if "feature/shields" in label_names\ 121 | or "feature/shields/!scripts" in label_names\ 122 | or "feature/shields/adblock" in label_names\ 123 | or "feature/shields/webcompat" in label_names\ 124 | or "feature/shields/fingerprint" in label_names\ 125 | or "feature/shields/panel" in label_names: 126 | shields_line = " - " +\ 127 | issue_title + ".(#" + str(issue.number) + ")" 128 | shields_list.append(shields_line) 129 | if "feature/sync" in label_names: 130 | sync_line = " - " +\ 131 | issue_title + ".(#" + str(issue.number) + ")" 132 | sync_list.append(sync_line) 133 | if "regression" in label_names: 134 | regression_line = " - " +\ 135 | issue_title + ".(#" + str(issue.number) + ")" 136 | regression_list.append(regression_line) 137 | if "webcompat" in label_names\ 138 | or "audio" in label_names\ 139 | or "feature/video" in label_names: 140 | webcompat_line = " - " +\ 141 | issue_title + ".(#" + str(issue.number) + ")" 142 | webcompat_list.append(webcompat_line) 143 | 144 | if rewards_list: 145 | print("## Brave Rewards") 146 | for line in sorted(rewards_list): 147 | print(line) 148 | print("") 149 | 150 | if crash_list: 151 | print("## Crash Fixes") 152 | for line in sorted(crash_list): 153 | print(line) 154 | print("") 155 | 156 | if privacy_list: 157 | print("## Private Windows/Tor Windows") 158 | for line in sorted(privacy_list): 159 | print(line) 160 | print("") 161 | 162 | if shields_list: 163 | print("## Shields ") 164 | for line in sorted(shields_list): 165 | print(line) 166 | print("") 167 | 168 | if sync_list: 169 | print("## Sync") 170 | for line in sorted(sync_list): 171 | print(line) 172 | print("") 173 | 174 | if regression_list: 175 | print("## Regression fixes") 176 | for line in sorted(regression_list): 177 | print(line) 178 | print("") 179 | 180 | if webcompat_list: 181 | print("## Webcompat fixes") 182 | for line in sorted(webcompat_list): 183 | print(line) 184 | print("") 185 | 186 | if general_list: 187 | print("## Other fixes") 188 | for line in sorted(general_list): 189 | print(line) 190 | print("") 191 | 192 | return 193 | 194 | 195 | def ios_changelog(): 196 | 197 | ios_key = sorted(ios_milestone.keys())[0] 198 | for issue in ios_repo.get_issues(milestone=ios_milestone[ios_key], 199 | sort="created", direction="asc", 200 | state="closed"): 201 | if 'pull' not in issue.html_url: 202 | original_issue_title = issue.title 203 | issue_title = original_issue_title 204 | if original_issue_title[0].islower(): 205 | lower = original_issue_title[0] 206 | upper = original_issue_title[0].upper() 207 | issue_title = original_issue_title.replace(lower, upper, 1) 208 | 209 | labels = issue.get_labels() 210 | label_names = [] 211 | 212 | for label in labels: 213 | label_names.append(label.name) 214 | if "crash" in label_names and "tests" not in label_names: 215 | crash_line = " - " +\ 216 | issue_title + ".(#" + str(issue.number) + ")" 217 | crash_list.append(crash_line) 218 | if "crash" not in label_names and "webcompat" not in label_names\ 219 | and "regression" not in label_names\ 220 | and "feature/private-tabs" not in label_names\ 221 | and "feature/sync" not in label_names\ 222 | and "feature/rewards" not in label_names\ 223 | and "feature/shields" not in label_names\ 224 | and "tests" not in label_names: 225 | general_line = " - " +\ 226 | issue_title + ".(#" + str(issue.number) + ")" 227 | general_list.append(general_line) 228 | if "regression" in label_names and "tests" not in label_names: 229 | regression_line = " - " +\ 230 | issue_title + ".(#" + str(issue.number) + ")" 231 | regression_list.append(regression_line) 232 | if "feature/shields" in label_names and "tests" not in label_names: 233 | shields_line = " - " +\ 234 | issue_title + ".(#" + str(issue.number) + ")" 235 | shields_list.append(shields_line) 236 | if "iPad" in label_names or "iPad Specific" in label_names: 237 | iPad_line = " - " +\ 238 | issue_title + ".(#" + str(issue.number) + ")" 239 | iPad_list.append(iPad_line) 240 | if "iPhone" in label_names\ 241 | or "iPhone X Specific" in label_names\ 242 | or "iPhone Specific" in label_names\ 243 | and "tests" not in label_names: 244 | iPhone_line = " - " +\ 245 | issue_title + ".(#" + str(issue.number) + ")" 246 | iPhone_list.append(iPhone_line) 247 | if "webcompat" in label_names\ 248 | or "audio" in label_names\ 249 | or "feature/video" in label_names\ 250 | and "tests" not in label_names: 251 | webcompat_line = " - " +\ 252 | issue_title + ".(#" + str(issue.number) + ")" 253 | webcompat_list.append(webcompat_line) 254 | if "feature/sync" in label_names: 255 | sync_line = " - " +\ 256 | issue_title + ".(#" + str(issue.number) + ")" 257 | sync_list.append(sync_line) 258 | 259 | if iPad_list: 260 | print("## iPad Specific Fixes") 261 | for line in sorted(iPad_list): 262 | print(line) 263 | print("") 264 | 265 | if iPhone_list: 266 | print("## iPhone Specific Fixes") 267 | for line in sorted(iPhone_list): 268 | print(line) 269 | print("") 270 | 271 | if crash_list: 272 | print("## Crash Fixes") 273 | for line in sorted(crash_list): 274 | print(line) 275 | print("") 276 | 277 | if shields_list: 278 | print("## Shields Fixes") 279 | for line in sorted(shields_list): 280 | print(line) 281 | print("") 282 | 283 | if sync_list: 284 | print("## Sync") 285 | for line in sorted(sync_list): 286 | print(line) 287 | print("") 288 | 289 | if regression_list: 290 | print("## Regression fixes") 291 | for line in sorted(regression_list): 292 | print(line) 293 | print("") 294 | 295 | if webcompat_list: 296 | print("## Webcompat fixes") 297 | for line in sorted(webcompat_list): 298 | print(line) 299 | print("") 300 | 301 | if general_list: 302 | print("## Other Fixes") 303 | for line in sorted(general_list): 304 | print(line) 305 | print("") 306 | 307 | return 308 | 309 | 310 | def android_changelog(): 311 | 312 | andrky = sorted(android_milestone.keys())[0] 313 | for issue in android_repo.get_issues( 314 | milestone=android_milestone[andrky], 315 | sort="created", direction="asc", 316 | state="closed"): 317 | if('pull' not in issue.html_url): 318 | original_issue_title = issue.title 319 | issue_title = original_issue_title 320 | if(original_issue_title[0].islower()): 321 | lower = original_issue_title[0] 322 | upper = original_issue_title[0].upper() 323 | issue_title = original_issue_title.replace(lower, upper, 1) 324 | 325 | labels = issue.get_labels() 326 | label_names = [] 327 | for label in labels: 328 | label_names.append(label.name) 329 | if "crash" in label_names and "tests" not in label_names: 330 | crash_line = " - " +\ 331 | issue_title + ".(#" + str(issue.number) + ")" 332 | crash_list.append(crash_line) 333 | if "crash" not in label_names and "webcompat" not in label_names\ 334 | and "regression" not in label_names\ 335 | and "feature/private-tabs" not in label_names\ 336 | and "feature/sync" not in label_names\ 337 | and "feature/rewards" not in label_names\ 338 | and "feature/shields" not in label_names\ 339 | and "tests" not in label_names: 340 | general_line = " - " + issue_title +\ 341 | ".(#" + str(issue.number) + ")" 342 | general_list.append(general_line) 343 | if "regression" in label_names and "tests" not in label_names: 344 | regression_line = " - " +\ 345 | issue_title + ".(#" + str(issue.number) + ")" 346 | regression_list.append(regression_line) 347 | if "feature/shields" in label_names and "tests" not in label_names: 348 | shields_line = " - " +\ 349 | issue_title + ".(#" + str(issue.number) + ")" 350 | shields_list.append(shields_line) 351 | 352 | if crash_list: 353 | print("## Crash Fixes") 354 | for line in sorted(crash_list): 355 | print(line) 356 | print("") 357 | 358 | if shields_list: 359 | print("## Shields Fixes") 360 | for line in sorted(shields_list): 361 | print(line) 362 | 363 | if sync_list: 364 | print("## Sync") 365 | for line in sorted(sync_list): 366 | print(line) 367 | print("") 368 | print("") 369 | 370 | if regression_list: 371 | print("## Regression fixes") 372 | for line in sorted(regression_list): 373 | print(line) 374 | print("") 375 | 376 | return 377 | 378 | 379 | print("**********************************************************************" 380 | "*******************") 381 | print(" Changelog Generator " 382 | " ") 383 | print("**********************************************************************" 384 | "*******************") 385 | 386 | header = print("Generate changelog for:\n") 387 | laptop = print("1. Laptop Release") 388 | ios = print("2. iOS") 389 | android = print("3. Android\n") 390 | 391 | select_checklist = input("Choose the platform for which you want to generate " 392 | "the changelog: ") 393 | 394 | if select_checklist == "1": 395 | print("\nSelect the milestone to generate changelog \n") 396 | 397 | length = 0 398 | while length < len(laptop_key): 399 | print(str(length+1) + ". " + sorted(laptop_milestone.keys())[length]) 400 | length += 1 401 | 402 | generate_test = input("\nGenerate changelog for: ") 403 | 404 | if select_checklist == "1" and generate_test == "1": 405 | print("\nGenerating changelog for " 406 | + str(sorted(laptop_milestone.keys())[0])) 407 | laptop_changelog(key1) 408 | elif select_checklist == "1" and generate_test == "2": 409 | print("\nGenerating changelog for " 410 | + str(sorted(laptop_milestone.keys())[1])) 411 | laptop_changelog(key2) 412 | elif select_checklist == "1" and generate_test == "3": 413 | print("\nGenerating changelog for " 414 | + str(sorted(laptop_milestone.keys())[2])) 415 | laptop_changelog(key3) 416 | elif select_checklist == "1" and generate_test == "4": 417 | print("\nGenerating changelog for " 418 | + str(sorted(laptop_milestone.keys())[3])) 419 | laptop_changelog(key4) 420 | elif select_checklist == "1" and generate_test == "5": 421 | print("\nGenerating changelog for " 422 | + str(sorted(laptop_milestone.keys())[4])) 423 | laptop_changelog(key5) 424 | else: 425 | print("Nothing to create in this milestone. Run the script again.") 426 | exit() 427 | 428 | elif select_checklist == "2": 429 | generate_ios_test = print("Generating changelog for iOS Release", 430 | sorted(ios_milestone.keys())[0]) 431 | ios_changelog() 432 | elif select_checklist == "3": 433 | generate_android_test = print("Generating changelog for Android Release", 434 | sorted(android_milestone.keys())[0]) 435 | android_changelog() 436 | else: 437 | print("Incorrect selection. Exiting test creation...") 438 | exit() 439 | -------------------------------------------------------------------------------- /testlinks.json: -------------------------------------------------------------------------------- 1 | { 2 | "links": [ 3 | "https://jsfiddle.net/LnwtLckc/5/", 4 | "https://developer.mozilla.org/en-US/docs/Web/API/Geolocation/Using_geolocation", 5 | "https://www.twitch.tv/adobe", 6 | "http://zyan.scripts.mit.edu/public", 7 | "https://slashdot.org/", 8 | "https://badssl.com/", 9 | "http://downloadme.org/", 10 | "https://brianbondy.com/", 11 | "https://jsfiddle.net/bkf50r8v/13/", 12 | "https://jsfiddle.net/7ke9r14a/9/", 13 | "https://audiofingerprint.openwpm.com/", 14 | "https://brianbondy.com/", 15 | "http://www.bennish.net/web-notifications.html", 16 | "https://trac.torproject.org/projects/tor/login", 17 | "http://www.orimi.com/pdf-test.pdf", 18 | "https://mixed-script.badssl.com/", 19 | "http://www.homestarrunner.com", 20 | "http://www.roboform.com/filling-test-all-fields", 21 | "http://samy.pl/evercookie/", 22 | "http://www.reddit.com/", 23 | "http://wordcounter.net", 24 | "https://extensions.inrialpes.fr/brave/" 25 | ] 26 | } 27 | --------------------------------------------------------------------------------