blob: 5513cb6b23e0963abf776f344169392ea4a3c65e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
#include "UnityPrefix.h"
#include "UserAuthorizationManager.h"
#include "Runtime/Misc/GameObjectUtility.h"
#if WEBPLUG
#include "Runtime/Misc/PlayerSettings.h"
#include "Runtime/Utilities/GlobalPreferences.h"
#include "PlatformDependent/CommonWebPlugin/Verification.h"
#endif
#if UNITY_EDITOR
#include "Editor/Src/EditorUserBuildSettings.h"
#include "Editor/Src/BuildPipeline/BuildTargetPlatformSpecific.h"
#endif
UserAuthorizationManager gUserAuthorizationManager;
UserAuthorizationManager& GetUserAuthorizationManager()
{
return gUserAuthorizationManager;
}
UserAuthorizationManager::UserAuthorizationManager()
{
m_AuthorizationOperation = NULL;
Reset ();
}
#if WEBPLUG && !UNITY_PEPPER
std::string GetUserAuthorizationModeKey ()
{
static const char *kUserAuthorizationModeKey = "UserAuthorizationMode";
std::string domain = GetStrippedPlayerDomain ();
std::string hash = GenerateHash ((unsigned char*)&domain[0], domain.size());
return kUserAuthorizationModeKey + hash;
}
#endif
void UserAuthorizationManager::Reset()
{
#if WEBPLUG && !UNITY_PEPPER
m_AuthorizationMode = kNone;
if (GetPlayerSettingsPtr())
{
std::string auth = GetGlobalPreference(GetUserAuthorizationModeKey().c_str());
sscanf(auth.c_str(), "%x", &m_AuthorizationMode);
}
#else
#if UNITY_EDITOR
if (GetEditorUserBuildSettingsPtr() != NULL && GetBuildTargetGroup(GetEditorUserBuildSettings().GetActiveBuildTarget()) == kPlatformWebPlayer)
m_AuthorizationMode = kNone;
else
#endif
// Allow Webcam and Microphone on all others targets than webplayer.
m_AuthorizationMode = kWebCam | kMicrophone;
#endif
if (m_AuthorizationOperation)
{
m_AuthorizationOperation->Release();
m_AuthorizationOperation = NULL;
}
m_AuthorizationRequest = kNone;
}
AsyncOperation *UserAuthorizationManager::RequestUserAuthorization(int mode)
{
if (m_AuthorizationOperation != NULL)
{
ErrorString ("A RequestUserAuthorization is already pending.");
}
else if (!HasUserAuthorization (mode))
{
m_AuthorizationRequest = mode;
m_AuthorizationOperation = new UserAuthorizationManagerOperation ();
m_AuthorizationOperation->Retain();
return m_AuthorizationOperation;
}
return new UserAuthorizationManagerErrorOperation ();
}
void UserAuthorizationManager::ReplyToUserAuthorizationRequest(bool reply, bool remember)
{
if (reply)
{
m_AuthorizationMode |= m_AuthorizationRequest;
#if WEBPLUG && !UNITY_PEPPER
if (remember)
SetGlobalPreference(GetUserAuthorizationModeKey().c_str(), Format("%x", m_AuthorizationMode).c_str());
#endif
}
m_AuthorizationRequest = kNone;
if (m_AuthorizationOperation)
{
m_AuthorizationOperation->InvokeCoroutine();
m_AuthorizationOperation->Release();
m_AuthorizationOperation = NULL;
}
}
MonoBehaviour *UserAuthorizationManager::GetAuthorizationDialog ()
{
if (m_AuthorizationRequest != kNone)
{
if (!m_AuthorizationDialog.IsValid())
{
m_AuthorizationDialog = &CreateGameObject ("", "Transform", "UserAuthorizationDialog", NULL);
m_AuthorizationDialog->SetHideFlags (Object::kHideInHierarchy);
}
return m_AuthorizationDialog->QueryComponent (MonoBehaviour);
}
else
{
if (m_AuthorizationDialog.IsValid ())
DestroyObjectHighLevel (m_AuthorizationDialog, true);
return NULL;
}
}
|