Internet Browser: Difference between revisions
(12 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
Nintendo Switch does not have a normal Internet Browser for user usage. However, there is multiple browser applets. It is the [https://web.archive.org/web/20170304075230/https://gl.access-company.com/news_event/archives/2017/170303/ NetFront NX] browser, which is based on Webkit. | Nintendo Switch does not have a normal Internet Browser for user usage. However, there is multiple browser applets. It is the [https://web.archive.org/web/20170304075230/https://gl.access-company.com/news_event/archives/2017/170303/ NetFront NX] browser, which is based on Webkit. | ||
When linking the Nintendo Account with Facebook, the Facebook Auth website will open, offering a search box that can be used to browse the Internet ("LoginApplet"). Alternatively, it can be accessed with | When linking the Nintendo Account with Facebook, the Facebook Auth website will open, offering a search box that can be used to browse the Internet ("LoginApplet"). Alternatively, it can be accessed with custom DNS settings which simulate a Wi-Fi login page ([[#WifiWebAuthApplet|WifiWebAuthApplet]] for captive-portal). | ||
== Known User Agent Strings == | == Known User Agent Strings == | ||
Line 37: | Line 37: | ||
| [[10.0.0]] | | [[10.0.0]] | ||
| Mozilla/5.0 (Nintendo Switch; <appletname>) AppleWebKit/606.4 (KHTML, like Gecko) NF/6.0.1.15.4 NintendoBrowser/5.1.0.20389 | | Mozilla/5.0 (Nintendo Switch; <appletname>) AppleWebKit/606.4 (KHTML, like Gecko) NF/6.0.1.15.4 NintendoBrowser/5.1.0.20389 | ||
|- | |||
| [[20.1.0]]-[[20.1.1]] | |||
| Mozilla/5.0 (Nintendo Switch; <appletname>) AppleWebKit/613.0 (KHTML, like Gecko) NF/6.0.3.27.11 NintendoBrowser/5.1.0.35219 | |||
[S2] Mozilla/5.0 (Nintendo Switch; <appletname>) AppleWebKit/613.0 (KHTML, like Gecko) NF/7.0.3.8.11 NintendoBrowser/5.2.0.35483 | |||
|} | |} | ||
The UA is generated with: "Mozilla/5.0 (Nintendo Switch; <appletname>) AppleWebKit/<webkitver> (KHTML, like Gecko) NF/<nfver0>.<nfver1>.<nfver2> NintendoBrowser/5.<ninver0>.<ninver1>.<ninver2>" | The UA is generated with: "Mozilla/5.0 (Nintendo Switch; <appletname>) AppleWebKit/<webkitver> (KHTML, like Gecko) NF/<nfver0>.<nfver1>.<nfver2> NintendoBrowser/5.<ninver0>.<ninver1>.<ninver2>" | ||
The full UA for Switch and Switch 2 are similar, on matching system-versions. The NF and NintendoBrowser versions are newer for S2 however. | |||
== Browser Applets == | == Browser Applets == | ||
Line 89: | Line 95: | ||
| Just displays an error-code. | | Just displays an error-code. | ||
| Yes | | Yes | ||
| 0100000000001010 | |||
| | |||
|- | |||
| NsoApplet | |||
| Nintendo Switch Online menu | |||
| | |||
| | |||
| 0100000000001010 | | 0100000000001010 | ||
| | | | ||
Line 125: | Line 138: | ||
The conntest URL from [[#WebWifiPageArg]] is used to poll whether the connection is usable, with the SDK [[libcurl]]. | The conntest URL from [[#WebWifiPageArg]] is used to poll whether the connection is usable, with the SDK [[libcurl]]. | ||
In later versions the above domain was replaced with [[Network|ctest.{...}]]. | |||
==Whitelisted Applets== | ==Whitelisted Applets== | ||
Line 160: | Line 175: | ||
You can invite friends to the room via | You can invite friends to the room via | ||
the Nintendo Switch Online Lounge app. | the Nintendo Switch Online Lounge app. | ||
=== NsoApplet === | |||
[11.0.0+] This applet handles the new Nintendo Switch Online menu, which is launched from qlaunch. | |||
The initial page loaded by this applet is: <nowiki>"https://%.nso.nintendo.net/</nowiki>{string from [[#TLVs|TLV]] 0x2}" | |||
== ShopN == | == ShopN == | ||
Line 212: | Line 232: | ||
The heap for the main-codebin (<code>malloc</code>/<code>operator new</code>) uses nn::lmem::*ExpHeap. [8.0.0+] <code>malloc</code>/<code>operator new</code> now checks the return-addr (addr located in a relevant NRO), with wkc_malloc_crashonfailure being called for the allocation if the check passes, otherwise a normal allocation is done (the code which runs for this will Abort if allocation fails). | The heap for the main-codebin (<code>malloc</code>/<code>operator new</code>) uses nn::lmem::*ExpHeap. [8.0.0+] <code>malloc</code>/<code>operator new</code> now checks the return-addr (addr located in a relevant NRO), with wkc_malloc_crashonfailure being called for the allocation if the check passes, otherwise a normal allocation is done (the code which runs for this will Abort if allocation fails). | ||
<code>malloc</code> passes the input size directly to the called func. <code>operator new</code> when handling normal non-wkc allocations passes the following to the called func: <code>sxtw x1, {inw0}</code> (for wkc allocations the size is passed directly). | <code>malloc</code> passes the input size directly to the called func. <code>operator new</code> when handling normal non-wkc allocations passes the following to the called func: <code>sxtw x1, {inw0}</code> (for wkc allocations the size is passed directly). [12.1.0+] The size is now passed directly (64bit) without using sxtw. | ||
[11.0.0+] There's now optional code for using [[SVC|svcMapPhysicalMemoryUnsafe]] etc, however it's unknown what sets the flag for this. An Abort string used this is: "{path}/TransferredMemoryManager.cpp" | |||
== Applet Launching == | == Applet Launching == | ||
Line 267: | Line 289: | ||
| 7 | | 7 | ||
| Lobby | | Lobby | ||
|- | |||
| 8 | |||
| [[#NsoApplet|Lhub]] | |||
|} | |} | ||
Line 280: | Line 305: | ||
When receiving messages, it will repeatedly pop Interactive output storage until no more are available. Non-Ack messages are Acked. | When receiving messages, it will repeatedly pop Interactive output storage until no more are available. Non-Ack messages are Acked. | ||
* Ack: Verifies that message_count is not already 0, then decrements it. Then cur_size is decreased by the u32 loaded from msgcontent+0. | * Ack: Verifies that message_count is not already 0, then decrements it. Then cur_size is decreased by the u32 loaded from msgcontent+0. | ||
* 0x0: Does some validation. Reads the message content into the user buffer, when contentsize is non-zero. The original contentsize is written to an user output param. The last byte in the user buffer (contentsize clamped to the user max-buf-size) is set to 0 for NUL-termination. | * 0x0: Does some validation. Reads the message content into the user buffer, when contentsize is non-zero. The original contentsize is written to an user output param. The last byte in the user buffer (contentsize clamped to the user max-buf-size, -1) is set to 0 for NUL-termination. | ||
Next info was tested in 9.0.0 | Next info was tested in 9.0.0 | ||
Line 906: | Line 931: | ||
| u8 bool | | u8 bool | ||
| MediaPlayerUiEnabled | | MediaPlayerUiEnabled | ||
|- | |||
| [11.0.0+] | |||
| | |||
| 0x44 | |||
| 0x1 | |||
| bool | |||
| TransferMemoryEnabled | |||
|} | |} | ||
Line 918: | Line 950: | ||
[6.0.0+] <code>AddAlbumEntryAndMediaData</code> was added: | [6.0.0+] <code>AddAlbumEntryAndMediaData</code> was added: | ||
* Looks for AlbumEntry{N} TLVs, when a TLV is not found it is written, then the associated AdditionalMediaData{N} TLV is written the same way as AdditionalMediaData0. If all AlbumEntry{N} TLVs already exist, this returns without writing anything. | * Looks for AlbumEntry{N} TLVs, when a TLV is not found it is written, then the associated AdditionalMediaData{N} TLV is written the same way as AdditionalMediaData0. If all AlbumEntry{N} TLVs already exist, this returns without writing anything. | ||
TransferMemoryEnabled: sdknso only exposes this for the Web applet. The sdknso func uses <code>nn::os::QueryMemoryInfo</code> at the start of the func, however the output is unused. The applet doesn't seem to parse this TLV. | |||
==== Output TLVs ==== | ==== Output TLVs ==== |