{"id":3313,"date":"2019-12-09T20:13:49","date_gmt":"2019-12-09T18:13:49","guid":{"rendered":"https:\/\/blog.tomayac.com\/2019\/12\/09\/inspecting-facebooks-webview\/"},"modified":"2019-12-09T20:13:49","modified_gmt":"2019-12-09T18:13:49","slug":"inspecting-facebooks-webview","status":"publish","type":"post","link":"https:\/\/tomayac.com\/wordpress\/2019\/12\/09\/inspecting-facebooks-webview\/","title":{"rendered":"Inspecting Facebook&#8217;s WebView"},"content":{"rendered":"\n\t\t\t<p>Both\n<a href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.facebook.katana&amp;hl=en\">Facebook's Android app<\/a>\nas well as\n<a href=\"https:\/\/apps.apple.com\/us\/app\/facebook\/id284882215\">Facebook's iOS app<\/a> use a so-called in-app browser,\nsometimes also referred to as IAB.\nThe core argument for using an in-app browser (instead of the user's default browser)\nis to keep users in the app and to enable closer app integration patterns\n(like &quot;quote from a page in a new Facebook post&quot;), while making others harder or even impossible\n(like &quot;share this link to Twitter&quot;).\nTechnically, IABs are implemented as\n<a href=\"https:\/\/developer.android.com\/reference\/android\/webkit\/WebView\"><code>WebView<\/code><\/a>s on Android,\nrespectively as\n<a href=\"https:\/\/developer.apple.com\/documentation\/webkit\/wkwebview\"><code>WKWebView<\/code><\/a>s on iOS.\nTo simplify things, from hereon, I will refer to both simply as <em>WebViews<\/em>.<\/p>\n<h2 id=\"in-app-browsers-are-less-capable-than-real-browsers\">In-App Browsers are less capable than real browsers <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2019\/12\/09\/inspecting-facebooks-webview\/#in-app-browsers-are-less-capable-than-real-browsers\">\u2693<\/a><\/h2>\n<p>Turns out, WebViews are rather limited compared to real browsers like Firefox, Edge, Chrome,\nand to some extent also Safari.\nIn the past, I have done some <a href=\"https:\/\/ai.google\/research\/pubs\/pub46739\">research<\/a>\non their limitations when it comes to features that are important in the context of Progressive Web Apps.\nThe linked paper has all the details, but you can simply see for yourself by opening\nthe <a href=\"https:\/\/tomayac.github.io\/pwa-feature-detector\/\">\ud83d\udd75\ufe0f PWA Feature Detector <\/a> app\nthat I have developed for this research in your regular browser,\nand then in a WebView like Facebook's in-app browser (you can share the\n<a href=\"https:\/\/tomayac.github.io\/pwa-feature-detector\/\">link<\/a> visible to just yourself on Facebook\nand then click through, or try to open my\n<a href=\"https:\/\/www.facebook.com\/story.php?story_fbid=10155133394957286&amp;id=500037285\">post<\/a> in the app).<\/p>\n<h2 id=\"in-app-browsers-can-modify-webpages\">In-App Browsers can modify webpages <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2019\/12\/09\/inspecting-facebooks-webview\/#in-app-browsers-can-modify-webpages\">\u2693<\/a><\/h2>\n<p>On top of limited features, WebViews <em>can<\/em> also be used for effectively conducting intended\n<a href=\"https:\/\/en.wikipedia.org\/wiki\/Man-in-the-middle_attack\">man-in-the-middle attacks<\/a>,\nsince the IAB developer can arbitrarily\n<a href=\"https:\/\/developer.android.com\/reference\/android\/webkit\/WebView#addJavascriptInterface(java.lang.Object,%20java.lang.String)\">inject JavaScript code<\/a>\nand also\n<a href=\"https:\/\/developer.android.com\/reference\/android\/webkit\/WebViewClient.html#shouldInterceptRequest(android.webkit.WebView,%20android.webkit.WebResourceRequest)\">intercept network traffic<\/a>.\nMost of the time, this feature is used for good.\nFor example, an airline company might reuse the \ud83d\udcba airplane seat selector logic\non both their native app as well as on their Web app.\nIn their native app, they would remove things like the header and the footer,\nwhich they then would show on the Web (this is likely the origin of the\n<a href=\"https:\/\/twitter.com\/old_sound\/status\/641649070495408128\">CSS can kill you<\/a> meme).<\/p>\n<h2 id=\"if-you-build-an-iab%2C-don't-use-a-webview\">If you build an IAB, don't use a WebView <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2019\/12\/09\/inspecting-facebooks-webview\/#if-you-build-an-iab%2C-don't-use-a-webview\">\u2693<\/a><\/h2>\n<p>For these reasons, people like <a href=\"https:\/\/twitter.com\/slightlylate\">Alex Russell<\/a>\u2014whom\nyou should definitely follow\u2014have been advocating against WebView-based IABs.\nInstead, you should wherever possible use\n<a href=\"https:\/\/developer.chrome.com\/multidevice\/android\/customtabs\">Chrome Custom Tabs<\/a> on Android,\nor the iOS counterpart\n<a href=\"https:\/\/developer.apple.com\/documentation\/safariservices\/sfsafariviewcontroller\"><code>SFSafariViewController<\/code><\/a>.\nAlex <a href=\"https:\/\/twitter.com\/slightlylate\/status\/1167567508619948032\">writes<\/a>:<\/p>\n<blockquote>\n<p>Note that responsible native apps <em>have<\/em> a way of creating an &quot;in app browser&quot; that doesn't subvert user choice or break the web:<\/p>\n<p><a href=\"https:\/\/developer.chrome.com\/multidevice\/android\/customtabs\">https:\/\/developer.chrome.com\/multidevice\/android\/customtabs<\/a><\/p>\n<p>Any browser can implement the protocol &amp; default browser will be used. FB can enable this with their next update.<\/p>\n<\/blockquote>\n<h2 id=\"if-you-have-to-use-a-webview-based-iab%2C-mark-it-debuggable\">If you have to use a WebView-based IAB, mark it debuggable <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2019\/12\/09\/inspecting-facebooks-webview\/#if-you-have-to-use-a-webview-based-iab%2C-mark-it-debuggable\">\u2693<\/a><\/h2>\n<p>Alex has been telling people for a long time that they should\n<a href=\"https:\/\/twitter.com\/patmeenan\/status\/1202646663124402177\">mark their WebView-based IABs debuggable<\/a>.\nThe actual code for that is a one-liner:<\/p>\n<pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token class-name\">Build<\/span><span class=\"token punctuation\">.<\/span>VERSION<span class=\"token punctuation\">.<\/span>SDK_INT <span class=\"token operator\">>=<\/span> <span class=\"token class-name\">Build<\/span><span class=\"token punctuation\">.<\/span>VERSION_CODES<span class=\"token punctuation\">.<\/span>KITKAT<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token class-name\">WebView<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">setWebContentsDebuggingEnabled<\/span><span class=\"token punctuation\">(<\/span><span class=\"token boolean\">true<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token punctuation\">}<\/span><\/code><\/pre>\n<h2 id=\"looking-into-facebook's-iab\">Looking into Facebook's IAB <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2019\/12\/09\/inspecting-facebooks-webview\/#looking-into-facebook's-iab\">\u2693<\/a><\/h2>\n<p>The other day, I learned with great joy that Facebook finally have marked their IAB debuggable \ud83c\udf89.\n<a href=\"https:\/\/twitter.com\/patmeenan\">Patrick Meenan<\/a>\u2014whom you should likewise follow\nand whom you might know from the amazing <a href=\"https:\/\/webpagetest.org\/\">WebPageTest<\/a>\nproject\u2014<a href=\"https:\/\/twitter.com\/patmeenan\/status\/1202646668098899970\">writes<\/a> in a Twitter thread:<\/p>\n<blockquote>\n<p>You can now remote-debug sites in the Facebook in-app browser on Android.\nIt is enabled automatically so once your device is in dev mode with USB debugging\nand a browser open just visit chrome:\/\/inspect to attach to the WebView.<\/p>\n<\/blockquote>\n<blockquote>\n<p>The browser (on iOS and Android) is just a WebView so it should behave\nmostly like Chrome and Safari but it adds some identifiers to the UA string\nwhich sometimes causes pages that UA sniff to break.<\/p>\n<\/blockquote>\n<blockquote>\n<p>Finally, if your analytics aren't breaking out the in-app browsers for you,\nI highly recommend you see if it is possible to enable.\nYou might be shocked at how much of your traffic comes from an in-app browser\n(odds are it is the 3rd most common browser behind Chrome and Safari).<\/p>\n<\/blockquote>\n<p>I have thus followed up on the invitation and had a closer look at their IAB by inspecting\n<a href=\"https:\/\/example.org\/\">example.org<\/a> and also a simple test page\n<a href=\"https:\/\/facebook-debug.glitch.me\/\">facebook-debug.glitch.me<\/a> that contains the\n<a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Statements\/debugger\"><code>debugger<\/code><\/a>\nstatement in its head.\nI have linked a <a href=\"https:\/\/blog.tomayac.com\/images\/example_com_profile.json\">debug trace<\/a> \ud83d\udcc4 that you can open for yourself\nin the Performance tab of the Chrome DevTools.<\/p>\n<h3 id=\"user-agent-string\">User-Agent String <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2019\/12\/09\/inspecting-facebooks-webview\/#user-agent-string\">\u2693<\/a><\/h3>\n<p>As pre-announced by Patrick, Facebook's IAB changes the <code>user-agent<\/code> string.\nThe\n<a href=\"https:\/\/developers.google.com\/web\/tools\/chrome-devtools\/remote-debugging\/webviews#configure_webviews_for_debugging\">default WebView <code>user-agent<\/code> string<\/a>\nlooks something like <code>Mozilla\/5.0 (Linux; Android 5.1.1; Nexus 5 Build\/LMY48B; wv) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/43.0.2357.65 Mobile Safari\/537.36<\/code>\nFacebook's IAB browser currently sends this:<\/p>\n<pre class=\"language-js\"><code class=\"language-js\">navigator<span class=\"token punctuation\">.<\/span>userAgent<br><span class=\"token comment\">\/\/ \"Mozilla\/5.0 (Linux; Android 10; Pixel 3a Build\/QQ2A.191125.002; wv) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/78.0.3904.108 Mobile Safari\/537.36 [FB_IAB\/FB4A;FBAV\/250.0.0.14.241;]\"<\/span><\/code><\/pre>\n<p>Compared to the default <code>user-agent<\/code> string, the identifying bit is the suffix <code>[FB_IAB\/FB4A;FBAV\/250.0.0.14.241;]<\/code>.<\/p>\n<h3 id=\"added-window-properties\">Added <code>window<\/code> properties <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2019\/12\/09\/inspecting-facebooks-webview\/#added-window-properties\">\u2693<\/a><\/h3>\n<p>Facebook's IAB adds two new properties to <code>window<\/code>, with the values <code>0<\/code> and <code>1<\/code>.<\/p>\n<pre class=\"language-js\"><code class=\"language-js\">window<span class=\"token punctuation\">.<\/span><span class=\"token constant\">TEMPORARY<\/span><br><span class=\"token comment\">\/\/ 0<\/span><br>window<span class=\"token punctuation\">.<\/span><span class=\"token constant\">PERSISTENT<\/span><br><span class=\"token comment\">\/\/ 1<\/span><\/code><\/pre>\n<h3 id=\"added-window-object\">Added <code>window<\/code> object <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2019\/12\/09\/inspecting-facebooks-webview\/#added-window-object\">\u2693<\/a><\/h3>\n<p>Facebook further adds a new <code>window<\/code> object <code>FbQuoteShareJSInterface<\/code>.<\/p>\n<pre class=\"language-js\"><code class=\"language-js\">document<span class=\"token punctuation\">.<\/span><span class=\"token function-variable function\">onselectionchange<\/span> <span class=\"token operator\">=<\/span> <span class=\"token keyword\">function<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br>  window<span class=\"token punctuation\">.<\/span>FbQuoteShareJSInterface<span class=\"token punctuation\">.<\/span><span class=\"token function\">onSelectionChange<\/span><span class=\"token punctuation\">(<\/span><br>    window<span class=\"token punctuation\">.<\/span><span class=\"token function\">getSelection<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">toString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br>    window<span class=\"token punctuation\">.<\/span>location<span class=\"token punctuation\">.<\/span>href<br>  <span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/code><\/pre>\n<p>This code is used for the &quot;share quote&quot; feature that allows users to mark text on a page to share.<\/p>\n<p><img src=\"https:\/\/blog.tomayac.com\/images\/facebook_iab.png\" alt=\"Facebook's in-app browser and its &quot;share quote&quot; feature\"><\/p>\n<h3 id=\"performance-monitoring-and-feature-detection\">Performance monitoring and feature detection <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2019\/12\/09\/inspecting-facebooks-webview\/#performance-monitoring-and-feature-detection\">\u2693<\/a><\/h3>\n<p>Facebook runs some performance monitoring via the\n<a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Performance\"><code>Performance<\/code><\/a> interface.\nThis is split up in two scripts, each of which they seem to run three times.\nThey also check if a given page is using <a href=\"https:\/\/amp.dev\/\">AMP<\/a>\nby checking for the presence of the <code>amp<\/code> or <code>\u26a1\ufe0f<\/code> attribute on <code>&lt;html&gt;<\/code>.<\/p>\n<pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">void<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br>  <span class=\"token keyword\">try<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>window<span class=\"token punctuation\">.<\/span>location<span class=\"token punctuation\">.<\/span>href <span class=\"token operator\">===<\/span> <span class=\"token string\">\"about:blank\"<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br>      <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br>    <span class=\"token punctuation\">}<\/span><br>    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><br>      <span class=\"token operator\">!<\/span>window<span class=\"token punctuation\">.<\/span>performance <span class=\"token operator\">||<\/span><br>      <span class=\"token operator\">!<\/span>window<span class=\"token punctuation\">.<\/span>performance<span class=\"token punctuation\">.<\/span>timing <span class=\"token operator\">||<\/span><br>      <span class=\"token operator\">!<\/span>document <span class=\"token operator\">||<\/span><br>      <span class=\"token operator\">!<\/span>document<span class=\"token punctuation\">.<\/span>body <span class=\"token operator\">||<\/span><br>      document<span class=\"token punctuation\">.<\/span>body<span class=\"token punctuation\">.<\/span>scrollHeight <span class=\"token operator\">&lt;=<\/span> <span class=\"token number\">0<\/span> <span class=\"token operator\">||<\/span><br>      <span class=\"token operator\">!<\/span>document<span class=\"token punctuation\">.<\/span>body<span class=\"token punctuation\">.<\/span>children <span class=\"token operator\">||<\/span><br>      document<span class=\"token punctuation\">.<\/span>body<span class=\"token punctuation\">.<\/span>children<span class=\"token punctuation\">.<\/span>length <span class=\"token operator\">&lt;<\/span> <span class=\"token number\">1<\/span><br>    <span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br>      <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br>    <span class=\"token punctuation\">}<\/span><br>    <span class=\"token keyword\">var<\/span> nvtiming__fb_t <span class=\"token operator\">=<\/span> window<span class=\"token punctuation\">.<\/span>performance<span class=\"token punctuation\">.<\/span>timing<span class=\"token punctuation\">;<\/span><br>    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>nvtiming__fb_t<span class=\"token punctuation\">.<\/span>responseEnd <span class=\"token operator\">><\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br>      console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"FBNavResponseEnd:\"<\/span> <span class=\"token operator\">+<\/span> nvtiming__fb_t<span class=\"token punctuation\">.<\/span>responseEnd<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br>    <span class=\"token punctuation\">}<\/span><br>    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>nvtiming__fb_t<span class=\"token punctuation\">.<\/span>domContentLoadedEventStart <span class=\"token operator\">><\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br>      console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span><br>        <span class=\"token string\">\"FBNavDomContentLoaded:\"<\/span> <span class=\"token operator\">+<\/span> nvtiming__fb_t<span class=\"token punctuation\">.<\/span>domContentLoadedEventStart<br>      <span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br>    <span class=\"token punctuation\">}<\/span><br>    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>nvtiming__fb_t<span class=\"token punctuation\">.<\/span>loadEventEnd <span class=\"token operator\">><\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br>      console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"FBNavLoadEventEnd:\"<\/span> <span class=\"token operator\">+<\/span> nvtiming__fb_t<span class=\"token punctuation\">.<\/span>loadEventEnd<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br>    <span class=\"token punctuation\">}<\/span><br>    <span class=\"token keyword\">var<\/span> nvtiming__fb_html <span class=\"token operator\">=<\/span> document<span class=\"token punctuation\">.<\/span><span class=\"token function\">getElementsByTagName<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"html\"<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><br>    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>nvtiming__fb_html<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br>      <span class=\"token keyword\">var<\/span> nvtiming__fb_html_amp <span class=\"token operator\">=<\/span><br>        nvtiming__fb_html<span class=\"token punctuation\">.<\/span><span class=\"token function\">hasAttribute<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"amp\"<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">||<\/span><br>        nvtiming__fb_html<span class=\"token punctuation\">.<\/span><span class=\"token function\">hasAttribute<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"\\u26A1\"<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br>      console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"FBNavAmpDetect:\"<\/span> <span class=\"token operator\">+<\/span> nvtiming__fb_html_amp<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br>    <span class=\"token punctuation\">}<\/span><br>  <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">catch<\/span> <span class=\"token punctuation\">(<\/span>err<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br>    console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"fb_navigation_timing_error:\"<\/span> <span class=\"token operator\">+<\/span> err<span class=\"token punctuation\">.<\/span>message<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br>  <span class=\"token punctuation\">}<\/span><br><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token comment\">\/\/ FBNavResponseEnd:1575904580720<\/span><br><span class=\"token comment\">\/\/ FBNavDomContentLoaded:1575904586057<\/span><br><span class=\"token comment\">\/\/ FBNavAmpDetect:false<\/span><\/code><\/pre>\n<pre class=\"language-js\"><code class=\"language-js\">document<span class=\"token punctuation\">.<\/span><span class=\"token function\">addEventListener<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"DOMContentLoaded\"<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token parameter\">event<\/span> <span class=\"token operator\">=><\/span> <span class=\"token punctuation\">{<\/span><br>  console<span class=\"token punctuation\">.<\/span><span class=\"token function\">info<\/span><span class=\"token punctuation\">(<\/span><br>    <span class=\"token string\">\"FBNavDomContentLoaded:\"<\/span> <span class=\"token operator\">+<\/span><br>      window<span class=\"token punctuation\">.<\/span>performance<span class=\"token punctuation\">.<\/span>timing<span class=\"token punctuation\">.<\/span>domContentLoadedEventStart<br>  <span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token comment\">\/\/ FBNavDomContentLoaded:1575904586057<\/span><\/code><\/pre>\n<h2 id=\"feature-policy-tests\">Feature Policy tests <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2019\/12\/09\/inspecting-facebooks-webview\/#feature-policy-tests\">\u2693<\/a><\/h2>\n<p>They run some <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Feature_Policy\">Feature Policy<\/a>\ntests via a function named <code>getFeaturePolicyAllowListOnPage()<\/code>.\nYou can see the documentation for the tested\n<a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Feature-Policy\">directives<\/a>\non the Mozilla Developer Network.<\/p>\n<pre class=\"language-js\"><code class=\"language-js\"><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br>  <span class=\"token keyword\">function<\/span> <span class=\"token function\">getFeaturePolicyAllowListOnPage<\/span><span class=\"token punctuation\">(<\/span><span class=\"token parameter\">features<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token keyword\">const<\/span> map <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><br>    <span class=\"token keyword\">const<\/span> featurePolicy <span class=\"token operator\">=<\/span> document<span class=\"token punctuation\">.<\/span>policy <span class=\"token operator\">||<\/span> document<span class=\"token punctuation\">.<\/span>featurePolicy<span class=\"token punctuation\">;<\/span><br>    <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> feature <span class=\"token keyword\">of<\/span> features<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br>      map<span class=\"token punctuation\">[<\/span>feature<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">{<\/span><br>        allowed<span class=\"token operator\">:<\/span> featurePolicy<span class=\"token punctuation\">.<\/span><span class=\"token function\">allowsFeature<\/span><span class=\"token punctuation\">(<\/span>feature<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br>        allowList<span class=\"token operator\">:<\/span> featurePolicy<span class=\"token punctuation\">.<\/span><span class=\"token function\">getAllowlistForFeature<\/span><span class=\"token punctuation\">(<\/span>feature<span class=\"token punctuation\">)<\/span><br>      <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><br>    <span class=\"token punctuation\">}<\/span><br>    <span class=\"token keyword\">return<\/span> map<span class=\"token punctuation\">;<\/span><br>  <span class=\"token punctuation\">}<\/span><br>  <span class=\"token keyword\">const<\/span> allPolicies <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">[<\/span><br>    <span class=\"token string\">\"geolocation\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"midi\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"ch-ect\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"execution-while-not-rendered\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"layout-animations\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"vertical-scroll\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"forms\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"oversized-images\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"document-access\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"magnetometer\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"picture-in-picture\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"modals\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"unoptimized-lossless-images-strict\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"accelerometer\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"vr\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"document-domain\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"serial\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"encrypted-media\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"font-display-late-swap\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"unsized-media\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"ch-downlink\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"ch-ua-arch\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"presentation\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"xr-spatial-tracking\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"lazyload\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"idle-detection\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"popups\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"scripts\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"unoptimized-lossless-images\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"sync-xhr\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"ch-width\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"ch-ua-model\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"top-navigation\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"ch-lang\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"camera\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"ch-viewport-width\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"loading-frame-default-eager\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"payment\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"pointer-lock\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"focus-without-user-activation\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"downloads-without-user-activation\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"ch-rtt\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"fullscreen\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"autoplay\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"execution-while-out-of-viewport\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"ch-dpr\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"hid\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"usb\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"wake-lock\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"ch-ua-platform\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"ambient-light-sensor\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"gyroscope\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"document-write\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"unoptimized-lossy-images\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"sync-script\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"ch-device-memory\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"orientation-lock\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"ch-ua\"<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token string\">\"microphone\"<\/span><br>  <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><br>  <span class=\"token keyword\">return<\/span> <span class=\"token function\">getFeaturePolicyAllowListOnPage<\/span><span class=\"token punctuation\">(<\/span>allPolicies<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/code><\/pre>\n<p>Not all directives are currently supported by the WebView, so a number of warnings are logged.\nThe recognized ones (i.e., the output of the <code>getFeaturePolicyAllowListOnPage()<\/code> function above)\nresult in an object as follows.<\/p>\n<pre class=\"language-json\"><code class=\"language-json\"><span class=\"token punctuation\">{<\/span><br>  <span class=\"token property\">\"geolocation\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><br>      <span class=\"token string\">\"https:\/\/example.com\"<\/span><br>    <span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"midi\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><br>      <span class=\"token string\">\"https:\/\/example.com\"<\/span><br>    <span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"ch-ect\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"execution-while-not-rendered\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"layout-animations\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"vertical-scroll\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"forms\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"oversized-images\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"document-access\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"magnetometer\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><br>      <span class=\"token string\">\"https:\/\/example.com\"<\/span><br>    <span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"picture-in-picture\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><br>      <span class=\"token string\">\"*\"<\/span><br>    <span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"modals\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"unoptimized-lossless-images-strict\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"accelerometer\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><br>      <span class=\"token string\">\"https:\/\/example.com\"<\/span><br>    <span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"vr\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><br>      <span class=\"token string\">\"https:\/\/example.com\"<\/span><br>    <span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"document-domain\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><br>      <span class=\"token string\">\"*\"<\/span><br>    <span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"serial\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"encrypted-media\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><br>      <span class=\"token string\">\"https:\/\/example.com\"<\/span><br>    <span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"font-display-late-swap\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"unsized-media\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"ch-downlink\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"ch-ua-arch\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"presentation\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"xr-spatial-tracking\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"lazyload\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"idle-detection\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"popups\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"scripts\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"unoptimized-lossless-images\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"sync-xhr\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><br>      <span class=\"token string\">\"*\"<\/span><br>    <span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"ch-width\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"ch-ua-model\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"top-navigation\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"ch-lang\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"camera\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><br>      <span class=\"token string\">\"https:\/\/example.com\"<\/span><br>    <span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"ch-viewport-width\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"loading-frame-default-eager\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"payment\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"pointer-lock\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"focus-without-user-activation\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"downloads-without-user-activation\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"ch-rtt\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"fullscreen\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><br>      <span class=\"token string\">\"https:\/\/example.com\"<\/span><br>    <span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"autoplay\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><br>      <span class=\"token string\">\"https:\/\/example.com\"<\/span><br>    <span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"execution-while-out-of-viewport\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"ch-dpr\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"hid\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"usb\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><br>      <span class=\"token string\">\"https:\/\/example.com\"<\/span><br>    <span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"wake-lock\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"ch-ua-platform\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"ambient-light-sensor\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><br>      <span class=\"token string\">\"https:\/\/example.com\"<\/span><br>    <span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"gyroscope\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><br>      <span class=\"token string\">\"https:\/\/example.com\"<\/span><br>    <span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"document-write\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"unoptimized-lossy-images\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"sync-script\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"ch-device-memory\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"orientation-lock\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"ch-ua\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br>  <span class=\"token property\">\"microphone\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br>    <span class=\"token property\">\"allowed\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">,<\/span><br>    <span class=\"token property\">\"allowList\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><br>      <span class=\"token string\">\"https:\/\/example.com\"<\/span><br>    <span class=\"token punctuation\">]<\/span><br>  <span class=\"token punctuation\">}<\/span><br><span class=\"token punctuation\">}<\/span><\/code><\/pre>\n<h2 id=\"http-headers\">HTTP headers <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2019\/12\/09\/inspecting-facebooks-webview\/#http-headers\">\u2693<\/a><\/h2>\n<p>I checked the response and request headers, but nothing special stood out.\nThe only remarkable thing given that they look at Feature Policy is the <em>absence<\/em> of the\n<a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Feature-Policy\"><code>Feature-Policy<\/code> header<\/a>.<\/p>\n<h3 id=\"request-header\">Request header <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2019\/12\/09\/inspecting-facebooks-webview\/#request-header\">\u2693<\/a><\/h3>\n<pre><code>:authority: facebook-debug.glitch.me\n:method: GET\n:path: \/\n:scheme: https\naccept: text\/html,application\/xhtml+xml,application\/xml;q=0.9,image\/webp,image\/apng,*\/*;q=0.8,application\/signed-exchange;v=b3\naccept-encoding: gzip, deflate\naccept-language: en-US,en;q=0.9,de-DE;q=0.8,de;q=0.7,ca-ES;q=0.6,ca;q=0.5\ncache-control: no-cache\npragma: no-cache\nreferer: http:\/\/m.facebook.com\/\nsec-fetch-mode: navigate\nsec-fetch-site: none\nsec-fetch-user: ?1\nupgrade-insecure-requests: 1\nuser-agent: Mozilla\/5.0 (Linux; Android 10; Pixel 3a Build\/QQ2A.191125.002; wv) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/78.0.3904.108 Mobile Safari\/537.36 [FB_IAB\/FB4A;FBAV\/250.0.0.14.241;]\nx-requested-with: com.facebook.katana\n<\/code><\/pre>\n<h3 id=\"response-header\">Response header <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2019\/12\/09\/inspecting-facebooks-webview\/#response-header\">\u2693<\/a><\/h3>\n<pre><code>accept-ranges: bytes\ncache-control: max-age=0\ncontent-length: 527\ncontent-type: text\/html; charset=utf-8\ndate: Mon, 09 Dec 2019 15:23:40 GMT\netag: W\/&quot;20f-16eeb283880&quot;\nlast-modified: Mon, 09 Dec 2019 14:55:12 GMT\nstatus: 200\nvary: Origin\n<\/code><\/pre>\n<h2 id=\"conclusion\">Conclusion <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2019\/12\/09\/inspecting-facebooks-webview\/#conclusion\">\u2693<\/a><\/h2>\n<p>All in all, these are all the things Facebook did that I could observe\non the pages that I have tested.\nI didn't notice any click listeners or scroll listeners\n(that could be used for engagement tracking of Facebook users with the pages they browse on)\nor any other kind of &quot;phoning home&quot; functionality,\nbut they <em>could<\/em> of course have implemented this natively\nvia the WebView's\n<a href=\"https:\/\/developer.android.com\/reference\/android\/view\/View.OnScrollChangeListener\"><code>View.OnScrollChangeListener<\/code><\/a>\nor\n<a href=\"https:\/\/developer.android.com\/reference\/android\/view\/View.OnClickListener\"><code>View.OnClickListener<\/code><\/a>,\nas they\n<a href=\"https:\/\/github.com\/reverseengineeringer\/com.facebook.orca\/blob\/fac06904e19e204c9561438e4890e76c6ee00830\/src\/com\/facebook\/browser\/lite\/aq.java#L13\">did<\/a>\nfor long clicks for the <a href=\"https:\/\/blog.tomayac.com\/2019\/12\/09\/inspecting-facebooks-webview\/#added-window-object\"><code>FbQuoteShareJSInterface<\/code><\/a>.<\/p>\n<p>That being said, if after reading this you prefer your links to open in your default browser,\nit's well hidden, but definitely possible: <code>Settings &gt; Media and Contacts &gt; Links open externally<\/code>.<\/p>\n<p><img src=\"https:\/\/blog.tomayac.com\/images\/settings.png\" alt=\"Facebook Settings option: &quot;Links open externally&quot;\"><\/p>\n<p>It goes without saying, but just in case:\n<em>all code snippets in this post are owned by and copyright of Facebook<\/em>.<\/p>\n<p>Did you run a similar analysis with similar (or maybe different) findings?\nLet me know on Twitter or Mastodon by posting your thoughts with a <a href=\"https:\/\/blog.tomayac.com\/2019\/12\/09\/inspecting-facebooks-webview\/\">link to this post<\/a>.\nIt will then show up as a Webmention at the bottom.\nOn supporting platforms, you can simply use the &quot;Share Article&quot; button below.<\/p>\n\n\t\t\t<p>\n\t\t\t\t<img alt=\"Thomas Steiner\" width=\"32\" height=\"32\" src=\"https:\/\/blog.tomayac.com\/feed.php?dl=https%3A%2F%2Fblog.tomayac.com%2F2019%2F12%2F09%2Finspecting-facebooks-webview%2F&dp=%2F2019%2F12%2F09%2Finspecting-facebooks-webview%2F&dt=Inspecting%20Facebook's%20WebView\" alt=\"\">\n\t\t\t\t<br\/>This post appeared first on <a href=\"https:\/\/blog.tomayac.com\/2019\/12\/09\/inspecting-facebooks-webview\/\">https:\/\/blog.tomayac.com\/2019\/12\/09\/inspecting-facebooks-webview\/<\/a>.\n\t\t\t<\/p>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\t\t\tBoth<br \/>\nFacebook&#8217;s Android app<br \/>\nas well as<br \/>\nFacebook&#8217;s iOS app use a so-called in-app browser,<br \/>\nsometimes also referred to as IAB.<br \/>\nThe core argument for using an in-app browser (instead of the user&#8217;s default browser)<br \/>\nis to keep users in the app and to en&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"intlwemo_wallet_address":"","footnotes":""},"categories":[],"tags":[],"class_list":["post-3313","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/tomayac.com\/wordpress\/wp-json\/wp\/v2\/posts\/3313","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tomayac.com\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tomayac.com\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tomayac.com\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tomayac.com\/wordpress\/wp-json\/wp\/v2\/comments?post=3313"}],"version-history":[{"count":1,"href":"https:\/\/tomayac.com\/wordpress\/wp-json\/wp\/v2\/posts\/3313\/revisions"}],"predecessor-version":[{"id":3314,"href":"https:\/\/tomayac.com\/wordpress\/wp-json\/wp\/v2\/posts\/3313\/revisions\/3314"}],"wp:attachment":[{"href":"https:\/\/tomayac.com\/wordpress\/wp-json\/wp\/v2\/media?parent=3313"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tomayac.com\/wordpress\/wp-json\/wp\/v2\/categories?post=3313"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tomayac.com\/wordpress\/wp-json\/wp\/v2\/tags?post=3313"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}