Revert " Hide browser behind feature flag (#20036)"

This reverts commit ba3d4dd4ce.
This commit is contained in:
andrey 2024-05-17 12:08:53 +02:00
parent ba3d4dd4ce
commit afd92d2df1
No known key found for this signature in database
GPG Key ID: C20F2FDE9A98BA61
5 changed files with 192 additions and 193 deletions

View File

@ -11,11 +11,9 @@
[legacy.status-im.utils.random :as random] [legacy.status-im.utils.random :as random]
[native-module.core :as native-module] [native-module.core :as native-module]
[re-frame.core :as re-frame] [re-frame.core :as re-frame]
[react-native.core :as react]
[react-native.platform :as platform] [react-native.platform :as platform]
[status-im.common.json-rpc.events :as json-rpc] [status-im.common.json-rpc.events :as json-rpc]
[status-im.common.universal-links :as links] [status-im.common.universal-links :as links]
[status-im.config :as config]
[status-im.constants :as constants] [status-im.constants :as constants]
[status-im.contexts.chat.events :as chat.events] [status-im.contexts.chat.events :as chat.events]
[status-im.navigation.events :as navigation] [status-im.navigation.events :as navigation]
@ -304,18 +302,16 @@
:history [normalized-url]}] :history [normalized-url]}]
(if (links/universal-link? normalized-url) (if (links/universal-link? normalized-url)
{:dispatch [:universal-links/handle-url normalized-url]} {:dispatch [:universal-links/handle-url normalized-url]}
(if config/show-not-implemented-features? (rf/merge cofx
(rf/merge cofx {:db (assoc db
{:db (assoc db :browser/options
:browser/options {:browser-id (:browser-id browser)}
{:browser-id (:browser-id browser)} :browser/screen-id :browser)}
:browser/screen-id :browser)} (navigation/pop-to-root :shell-stack)
(navigation/pop-to-root :shell-stack) (chat.events/close-chat)
(chat.events/close-chat) (navigation/change-tab :browser-stack)
(navigation/change-tab :browser-stack) (update-browser browser)
(update-browser browser) (resolve-url nil)))))
(resolve-url nil))
(.openURL ^js react/linking (url/normalize-url url))))))
(rf/defn open-existing-browser (rf/defn open-existing-browser
"Opens an existing browser with it's history" "Opens an existing browser with it's history"

View File

@ -1,5 +1,8 @@
(ns legacy.status-im.browser.core-test (ns legacy.status-im.browser.core-test
(:require (:require
[cljs.test :refer-macros [deftest is testing]]
[legacy.status-im.browser.core :as browser]
[utils.i18n :as i18n]
[utils.url :as url])) [utils.url :as url]))
(defn has-wrong-properties? (defn has-wrong-properties?
@ -18,103 +21,101 @@
(some #(when (= (url/normalize-and-decode-url dapp-url) (first (:history %))) (:browser-id %)) (some #(when (= (url/normalize-and-decode-url dapp-url) (first (:history %))) (:browser-id %))
(vals (get-in result [:db :browser/browsers])))) (vals (get-in result [:db :browser/browsers]))))
#_(deftest browser-test (deftest browser-test
(let [dapp1-url "cryptokitties.co" (let [dapp1-url "cryptokitties.co"
dapp2-url "http://test2.com"] dapp2-url "http://test2.com"]
(testing "user opens a dapp" (testing "user opens a dapp"
(let [result-open (browser/open-url {:db {} :now 1} dapp1-url) (let [result-open (browser/open-url {:db {} :now 1} dapp1-url)
dapp1-id (get-dapp-id result-open dapp1-url)] dapp1-id (get-dapp-id result-open dapp1-url)]
(is (= dapp1-id (get-in result-open [:db :browser/options :browser-id])) (is (= dapp1-id (get-in result-open [:db :browser/options :browser-id]))
"browser-id should be dapp1-url") "browser-id should be dapp1-url")
(is (not (has-wrong-properties? result-open (is (not (has-wrong-properties? result-open
dapp1-id dapp1-id
{:browser-id dapp1-id {:browser-id dapp1-id
:history-index 0 :history-index 0
:history ["https://cryptokitties.co"] :history ["https://cryptokitties.co"]
:dapp? false :dapp? false
:name (i18n/label :t/browser)})) :name (i18n/label :t/browser)}))
"some properties of the browser are not correct") "some properties of the browser are not correct")
(testing "then a second dapp" (testing "then a second dapp"
(let [result-open-2 (browser/open-url {:db (:db result-open) (let [result-open-2 (browser/open-url {:db (:db result-open)
:now 2} :now 2}
dapp2-url) dapp2-url)
dapp2-id (get-dapp-id result-open-2 dapp2-url)] dapp2-id (get-dapp-id result-open-2 dapp2-url)]
(is (= dapp2-id (get-in result-open-2 [:db :browser/options :browser-id])) (is (= dapp2-id (get-in result-open-2 [:db :browser/options :browser-id]))
"browser-id should be dapp2 host") "browser-id should be dapp2 host")
(is (not (has-wrong-properties? result-open-2 (is (not (has-wrong-properties? result-open-2
dapp2-id dapp2-id
{:browser-id dapp2-id {:browser-id dapp2-id
:history-index 0 :history-index 0
:history ["http://test2.com"] :history ["http://test2.com"]
:dapp? false})) :dapp? false}))
"some properties of the browser are not correct") "some properties of the browser are not correct")
(testing "then removes the second dapp" (testing "then removes the second dapp"
(let [result-remove-2 (browser/remove-browser {:db (:db result-open-2)} dapp2-id)] (let [result-remove-2 (browser/remove-browser {:db (:db result-open-2)} dapp2-id)]
(is (= #{dapp1-id} (is (= #{dapp1-id}
(set (keys (get-in result-remove-2 [:db :browser/browsers])))) (set (keys (get-in result-remove-2 [:db :browser/browsers]))))
"the second dapp shouldn't be in the browser list anymore"))))) "the second dapp shouldn't be in the browser list anymore")))))
(testing "then opens the dapp again" (testing "then opens the dapp again"
(let [result-open-existing (browser/open-existing-browser {:db (:db result-open) (let [result-open-existing (browser/open-existing-browser {:db (:db result-open)
:now 2} :now 2}
dapp1-id) dapp1-id)
dapp1-url2 (str "https://" dapp1-url "/nav2")] dapp1-url2 (str "https://" dapp1-url "/nav2")]
(is (not (has-wrong-properties? result-open-existing (is (not (has-wrong-properties? result-open-existing
dapp1-id dapp1-id
{:browser-id dapp1-id {:browser-id dapp1-id
:history-index 0 :history-index 0
:history ["https://cryptokitties.co"] :history ["https://cryptokitties.co"]
:dapp? false :dapp? false
:name (i18n/label :t/browser)})) :name (i18n/label :t/browser)}))
"some properties of the browser are not correct") "some properties of the browser are not correct")
(is (nil? (browser/navigate-to-next-page result-open-existing)) (is (nil? (browser/navigate-to-next-page result-open-existing))
"nothing should happen if user tries to navigate to next page") "nothing should happen if user tries to navigate to next page")
(is (nil? (browser/navigate-to-previous-page result-open-existing)) (is (nil? (browser/navigate-to-previous-page result-open-existing))
"nothing should happen if user tries to navigate to previous page") "nothing should happen if user tries to navigate to previous page")
(testing "then navigates to a new url in the dapp" (testing "then navigates to a new url in the dapp"
(let [result-navigate (browser/navigation-state-changed (let [result-navigate (browser/navigation-state-changed
{:db (:db result-open-existing) {:db (:db result-open-existing)
:now 4} :now 4}
(clj->js {"url" dapp1-url2 (clj->js {"url" dapp1-url2
"loading" false}) "loading" false})
false)] false)]
(is (not (has-wrong-properties? result-navigate (is (not (has-wrong-properties? result-navigate
dapp1-id
{:browser-id dapp1-id
:history-index 1
:history ["https://cryptokitties.co" dapp1-url2]
:dapp? false
:name (i18n/label :t/browser)}))
"some properties of the browser are not correct")
(testing "then navigates to previous page"
(let [result-previous (browser/navigate-to-previous-page {:db (:db result-navigate)
:now 5})]
(is
(not (has-wrong-properties? result-previous
dapp1-id
{:browser-id dapp1-id
:history-index 0
:history ["https://cryptokitties.co" dapp1-url2]
:dapp? false
:name (i18n/label :t/browser)}))
"some properties of the browser are not correct")
(testing "then navigates to next page")
(let [result-next (browser/navigate-to-next-page {:db (:db result-previous)
:now 6})]
(is (not
(has-wrong-properties? result-next
dapp1-id dapp1-id
{:browser-id dapp1-id {:browser-id dapp1-id
:history-index 1 :history-index 1
:history ["https://cryptokitties.co" dapp1-url2] :history ["https://cryptokitties.co" dapp1-url2]
:dapp? false :dapp? false
:name (i18n/label :t/browser)})) :name (i18n/label :t/browser)}))
"some properties of the browser are not correct") "some properties of the browser are not correct"))))))))))))
(testing "then navigates to previous page"
(let [result-previous (browser/navigate-to-previous-page {:db (:db result-navigate)
:now 5})]
(is
(not (has-wrong-properties? result-previous
dapp1-id
{:browser-id dapp1-id
:history-index 0
:history ["https://cryptokitties.co"
dapp1-url2]
:dapp? false
:name (i18n/label :t/browser)}))
"some properties of the browser are not correct")
(testing "then navigates to next page")
(let [result-next (browser/navigate-to-next-page {:db (:db result-previous)
:now 6})]
(is (not
(has-wrong-properties? result-next
dapp1-id
{:browser-id dapp1-id
:history-index 1
:history ["https://cryptokitties.co"
dapp1-url2]
:dapp? false
:name (i18n/label :t/browser)}))
"some properties of the browser are not correct"))))))))))))

View File

@ -1,90 +1,96 @@
(ns legacy.status-im.browser.permissions-test) (ns legacy.status-im.browser.permissions-test
(:require
[cljs.test :refer-macros [deftest is testing]]
[legacy.status-im.browser.core :as browser]
[legacy.status-im.browser.core-test :as core.tests]
[legacy.status-im.browser.permissions :as permissions]
[legacy.status-im.utils.deprecated-types :as types]))
#_(deftest permissions-test (deftest permissions-test
(let [dapp-name "test.com" (let [dapp-name "test.com"
dapp-name2 "test2.org" dapp-name2 "test2.org"
cofx {:db (assoc-in (:db (browser/open-url {:db {}} dapp-name)) cofx {:db (assoc-in (:db (browser/open-url {:db {}} dapp-name))
[:profile/profile :public-key] [:profile/profile :public-key]
"public-key")} "public-key")}
dapp-id (core.tests/get-dapp-id cofx dapp-name)] dapp-id (core.tests/get-dapp-id cofx dapp-name)]
(testing "dapps permissions are initialized" (testing "dapps permissions are initialized"
(is (zero? (count (get-in cofx [:db :dapps/permissions])))) (is (zero? (count (get-in cofx [:db :dapps/permissions]))))
(is (= dapp-id (get-in cofx [:db :browser/options :browser-id])))) (is (= dapp-id (get-in cofx [:db :browser/options :browser-id]))))
(testing "receiving an unsupported permission" (testing "receiving an unsupported permission"
(let [result-ask (browser/process-bridge-message cofx (let [result-ask (browser/process-bridge-message cofx
(types/clj->json (types/clj->json
{:type "api-request" {:type "api-request"
:host dapp-name :host dapp-name
:messageId 0 :messageId 0
:permission "FAKE_PERMISSION"}))] :permission "FAKE_PERMISSION"}))]
(is (not (get-in result-ask [:browser/send-to-bridge :isAllowed]))))) (is (not (get-in result-ask [:browser/send-to-bridge :isAllowed])))))
(testing "receiving a supported permission" (testing "receiving a supported permission"
(let [result-ask (browser/process-bridge-message cofx (let [result-ask (browser/process-bridge-message cofx
(types/clj->json {:type "api-request" (types/clj->json {:type "api-request"
:host dapp-name
:messageId 1
:permission "contact-code"}))]
(is (= (get-in result-ask [:db :browser/options :show-permission])
{:requested-permission "contact-code"
:dapp-name "test.com"
:message-id 1
:yield-control? nil}))
(is (zero? (count (get-in result-ask [:db :dapps/permissions]))))
(testing "then user accepts the supported permission"
(let [accept-result (permissions/allow-permission {:db (:db result-ask)})]
(is (= (get accept-result :browser/send-to-bridge)
{:type "api-response"
:messageId 1
:isAllowed true
:data "public-key"
:permission "contact-code"})
"the data should have been sent to the bridge")
(is (= (get-in accept-result [:db :dapps/permissions])
{"test.com" {:dapp "test.com" :permissions ["contact-code"]}})
"the dapp should now have CONTACT_CODE permission")
(testing "then dapp asks for permission again"
(let [result-ask-again (browser/process-bridge-message {:db (:db accept-result)}
(types/clj->json
{:type "api-request"
:host dapp-name :host dapp-name
:messageId 2 :messageId 1
:permission "contact-code"}))] :permission "contact-code"}))]
(is (= (get result-ask-again :browser/send-to-bridge) (is (= (get-in result-ask [:db :browser/options :show-permission])
{:type "api-response" {:requested-permission "contact-code"
:isAllowed true :dapp-name "test.com"
:messageId 2 :message-id 1
:data "public-key" :yield-control? nil}))
:permission "contact-code"}) (is (zero? (count (get-in result-ask [:db :dapps/permissions]))))
"the response should be immediatly sent to the bridge")))
(testing "then user switch to another dapp that asks for permissions" (testing "then user accepts the supported permission"
(let [new-dapp (browser/open-url {:db (:db accept-result)} dapp-name2) (let [accept-result (permissions/allow-permission {:db (:db result-ask)})]
result-ask2 (browser/process-bridge-message {:db (:db new-dapp)} (is (= (get accept-result :browser/send-to-bridge)
(types/clj->json {:type "api-response"
{:type "api-request" :messageId 1
:host dapp-name2 :isAllowed true
:messageId 3 :data "public-key"
:permission "contact-code"}))] :permission "contact-code"})
(is (= (get-in result-ask2 [:db :dapps/permissions]) "the data should have been sent to the bridge")
{"test.com" {:dapp "test.com" :permissions ["contact-code"]}}) (is (= (get-in accept-result [:db :dapps/permissions])
"there should only be permissions for dapp-name at that point") {"test.com" {:dapp "test.com" :permissions ["contact-code"]}})
(is (nil? (get result-ask2 :browser/send-to-bridge)) "the dapp should now have CONTACT_CODE permission")
"no message should be sent to the bridge")
(testing "then user accepts permission for dapp-name2" (testing "then dapp asks for permission again"
(let [accept-result2 (permissions/allow-permission {:db (:db result-ask2)})] (let [result-ask-again (browser/process-bridge-message {:db (:db accept-result)}
(is (= (get-in accept-result2 [:db :dapps/permissions]) (types/clj->json
{"test.com" {:dapp "test.com" :permissions ["contact-code"]} {:type "api-request"
"test2.org" {:dapp "test2.org" :permissions ["contact-code"]}}) :host dapp-name
"there should be permissions for both dapps now") :messageId 2
(is (= (get accept-result2 :browser/send-to-bridge) :permission "contact-code"}))]
{:type "api-response" (is (= (get result-ask-again :browser/send-to-bridge)
:isAllowed true {:type "api-response"
:messageId 3 :isAllowed true
:data "public-key" :messageId 2
:permission "contact-code"}) :data "public-key"
"the response should be sent to the bridge"))))))))))) :permission "contact-code"})
"the response should be immediatly sent to the bridge")))
(testing "then user switch to another dapp that asks for permissions"
(let [new-dapp (browser/open-url {:db (:db accept-result)} dapp-name2)
result-ask2 (browser/process-bridge-message {:db (:db new-dapp)}
(types/clj->json
{:type "api-request"
:host dapp-name2
:messageId 3
:permission "contact-code"}))]
(is (= (get-in result-ask2 [:db :dapps/permissions])
{"test.com" {:dapp "test.com" :permissions ["contact-code"]}})
"there should only be permissions for dapp-name at that point")
(is (nil? (get result-ask2 :browser/send-to-bridge))
"no message should be sent to the bridge")
(testing "then user accepts permission for dapp-name2"
(let [accept-result2 (permissions/allow-permission {:db (:db result-ask2)})]
(is (= (get-in accept-result2 [:db :dapps/permissions])
{"test.com" {:dapp "test.com" :permissions ["contact-code"]}
"test2.org" {:dapp "test2.org" :permissions ["contact-code"]}})
"there should be permissions for both dapps now")
(is (= (get accept-result2 :browser/send-to-bridge)
{:type "api-response"
:isAllowed true
:messageId 3
:data "public-key"
:permission "contact-code"})
"the response should be sent to the bridge")))))))))))

View File

@ -5,7 +5,6 @@
[legacy.status-im.ui.components.react :as react] [legacy.status-im.ui.components.react :as react]
[re-frame.core :as re-frame] [re-frame.core :as re-frame]
[react-native.platform :as platform] [react-native.platform :as platform]
[status-im.config :as config]
[utils.i18n :as i18n] [utils.i18n :as i18n]
[utils.url :as url])) [utils.url :as url]))
@ -28,9 +27,8 @@
(defn browse (defn browse
[link] [link]
(show {:title (i18n/label :t/browsing-title) (show {:title (i18n/label :t/browsing-title)
:options [(when config/show-not-implemented-features? :options [{:label (i18n/label :t/browsing-open-in-status)
{:label (i18n/label :t/browsing-open-in-status) :action #(re-frame/dispatch [:browser.ui/open-url link])}
:action #(re-frame/dispatch [:browser.ui/open-url link])})
{:label (i18n/label (platform-web-browser)) {:label (i18n/label (platform-web-browser))
:action #(.openURL ^js react/linking (url/normalize-url link))}] :action #(.openURL ^js react/linking (url/normalize-url link))}]
:cancel-text (i18n/label :t/browsing-cancel)})) :cancel-text (i18n/label :t/browsing-cancel)}))

View File

@ -6,7 +6,6 @@
[react-native.gesture :as gesture] [react-native.gesture :as gesture]
[react-native.platform :as platform] [react-native.platform :as platform]
[react-native.reanimated :as reanimated] [react-native.reanimated :as reanimated]
[status-im.config :as config]
[status-im.contexts.shell.jump-to.animation :as animation] [status-im.contexts.shell.jump-to.animation :as animation]
[status-im.contexts.shell.jump-to.components.bottom-tabs.style :as style] [status-im.contexts.shell.jump-to.components.bottom-tabs.style :as style]
[status-im.contexts.shell.jump-to.constants :as shell.constants] [status-im.contexts.shell.jump-to.constants :as shell.constants]
@ -71,5 +70,4 @@
[gesture/gesture-detector {:gesture messages-double-tap-gesture} [gesture/gesture-detector {:gesture messages-double-tap-gesture}
[bottom-tab :i/messages :chats-stack shared-values notifications-data]] [bottom-tab :i/messages :chats-stack shared-values notifications-data]]
[bottom-tab :i/wallet :wallet-stack shared-values notifications-data] [bottom-tab :i/wallet :wallet-stack shared-values notifications-data]
(when config/show-not-implemented-features? [bottom-tab :i/browser :browser-stack shared-values notifications-data]]]]))
[bottom-tab :i/browser :browser-stack shared-values notifications-data])]]]))