< Summary

Class:ExternalUrlPromptHUDController
Assembly:ExternalUrlPromptHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/ExternalUrlPromptHUD/ExternalUrlPromptHUDController.cs
Covered lines:23
Uncovered lines:25
Coverable lines:48
Total lines:114
Line coverage:47.9% (23 of 48)
Covered branches:0
Total branches:0
Covered methods:5
Total methods:8
Method coverage:62.5% (5 of 8)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
ExternalUrlPromptHUDController(...)0%220100%
SetVisibility(...)0%2.212062.5%
Dispose()0%330100%
ProcessOpenUrlRequest(...)0%2100%
ProcessOpenUrlRequest(...)0%20400%
OpenUrl(...)0%2100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/ExternalUrlPromptHUD/ExternalUrlPromptHUDController.cs

#LineLine coverage
 1using DCL;
 2using DCL.Controllers;
 3using UnityEngine;
 4using System;
 5using System.Collections.Generic;
 6using DCL.Interface;
 7using DCL.Helpers;
 8using RPC.Context;
 9using Environment = DCL.Environment;
 10
 11public class ExternalUrlPromptHUDController : IHUD
 12{
 1513    internal ExternalUrlPromptView view { get; private set; }
 14
 215    internal Dictionary<int, HashSet<string>> trustedDomains = new Dictionary<int, HashSet<string>>();
 16
 17    private readonly RestrictedActionsContext restrictedActionsServiceContext;
 18
 219    public ExternalUrlPromptHUDController(RestrictedActionsContext restrictedActionsContext)
 20    {
 221        view = UnityEngine.Object.Instantiate(Resources.Load<GameObject>("ExternalUrlPromptHUD")).GetComponent<ExternalU
 222        view.name = "_ExternalUrlPromptHUD";
 223        view.content.SetActive(false);
 24
 225        if (Environment.i != null)
 226            Environment.i.world.sceneController.OnOpenExternalUrlRequest += ProcessOpenUrlRequest;
 27
 228        restrictedActionsServiceContext = restrictedActionsContext;
 229        restrictedActionsServiceContext.OpenExternalUrlPrompt += ProcessOpenUrlRequest;
 230    }
 31
 32    public void SetVisibility(bool visible)
 33    {
 134        view.gameObject.SetActive(visible);
 35
 136        if (visible)
 37        {
 138            view.content.SetActive(true);
 139            view.showHideAnimator.Show();
 40
 141            AudioScriptableObjects.dialogOpen.Play(true);
 42        }
 43        else
 44        {
 045            view.showHideAnimator.Hide();
 46
 047            AudioScriptableObjects.dialogClose.Play(true);
 48        }
 049    }
 50
 51    public void Dispose()
 52    {
 253        if (Environment.i != null)
 254            Environment.i.world.sceneController.OnOpenExternalUrlRequest -= ProcessOpenUrlRequest;
 55
 256        trustedDomains.Clear();
 57
 258        if (view != null)
 259            UnityEngine.Object.Destroy(view.gameObject);
 60
 261        restrictedActionsServiceContext.OpenExternalUrlPrompt -= ProcessOpenUrlRequest;
 262    }
 63
 64    internal void ProcessOpenUrlRequest(IParcelScene scene, string url)
 65    {
 066        ProcessOpenUrlRequest(url, scene.sceneData.sceneNumber);
 067    }
 68
 69    internal bool ProcessOpenUrlRequest(string url, int sceneNumber)
 70    {
 71        Uri uri;
 072        if (Uri.TryCreate(url, UriKind.Absolute, out uri))
 73        {
 074            if (trustedDomains.ContainsKey(sceneNumber) && trustedDomains[sceneNumber].Contains(uri.Host))
 75            {
 076                OpenUrl(url);
 077                return true;
 78            }
 79
 080            SetVisibility(true);
 081            Utils.UnlockCursor();
 082            view.RequestOpenUrl(uri, result =>
 83            {
 84                switch (result)
 85                {
 86                    case ExternalUrlPromptView.ResultType.APPROVED_TRUSTED:
 087                        if (!trustedDomains.ContainsKey(sceneNumber))
 88                        {
 089                            trustedDomains.Add(sceneNumber, new HashSet<string>());
 90                        }
 91
 092                        trustedDomains[sceneNumber].Add(uri.Host);
 093                        OpenUrl(url);
 094                        break;
 95                    case ExternalUrlPromptView.ResultType.APPROVED:
 096                        OpenUrl(url);
 97                        break;
 98                }
 99
 0100                SetVisibility(false);
 0101            });
 102
 0103            return true;
 104        }
 105
 0106        return false;
 107    }
 108
 109    private void OpenUrl(string url)
 110    {
 0111        WebInterface.OpenURL(url);
 0112        AnalyticsHelper.SendExternalLinkAnalytic(url);
 0113    }
 114}