OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "config.h" | 5 #include "config.h" |
6 #include "modules/credentialmanager/CredentialsContainer.h" | 6 #include "modules/credentialmanager/CredentialsContainer.h" |
7 | 7 |
8 #include "bindings/core/v8/Dictionary.h" | 8 #include "bindings/core/v8/Dictionary.h" |
9 #include "bindings/core/v8/ScriptPromise.h" | 9 #include "bindings/core/v8/ScriptPromise.h" |
10 #include "bindings/core/v8/ScriptPromiseResolver.h" | 10 #include "bindings/core/v8/ScriptPromiseResolver.h" |
11 #include "core/dom/DOMException.h" | 11 #include "core/dom/DOMException.h" |
12 #include "core/dom/ExceptionCode.h" | 12 #include "core/dom/ExceptionCode.h" |
13 #include "core/dom/ExecutionContext.h" | 13 #include "core/dom/ExecutionContext.h" |
14 #include "modules/credentialmanager/Credential.h" | 14 #include "modules/credentialmanager/Credential.h" |
15 #include "modules/credentialmanager/CredentialManagerClient.h" | 15 #include "modules/credentialmanager/CredentialManagerClient.h" |
16 #include "modules/credentialmanager/FederatedCredential.h" | 16 #include "modules/credentialmanager/FederatedCredential.h" |
17 #include "modules/credentialmanager/LocalCredential.h" | 17 #include "modules/credentialmanager/LocalCredential.h" |
18 #include "platform/weborigin/SecurityOrigin.h" | 18 #include "platform/weborigin/SecurityOrigin.h" |
19 #include "public/platform/Platform.h" | 19 #include "public/platform/Platform.h" |
20 #include "public/platform/WebCredential.h" | 20 #include "public/platform/WebCredential.h" |
21 #include "public/platform/WebCredentialManagerClient.h" | 21 #include "public/platform/WebCredentialManagerClient.h" |
22 #include "public/platform/WebCredentialManagerError.h" | 22 #include "public/platform/WebCredentialManagerError.h" |
23 #include "public/platform/WebFederatedCredential.h" | 23 #include "public/platform/WebFederatedCredential.h" |
24 #include "public/platform/WebLocalCredential.h" | 24 #include "public/platform/WebLocalCredential.h" |
25 | 25 |
26 namespace blink { | 26 namespace blink { |
27 | 27 |
28 static void rejectDueToCredentialManagerError(PassRefPtr<ScriptPromiseResolver>
resolver, WebCredentialManagerError* reason) | 28 static void rejectDueToCredentialManagerError(PassRefPtrWillBeRawPtr<ScriptPromi
seResolver> resolver, WebCredentialManagerError* reason) |
29 { | 29 { |
30 switch (reason->errorType) { | 30 switch (reason->errorType) { |
31 case WebCredentialManagerError::ErrorTypeDisabled: | 31 case WebCredentialManagerError::ErrorTypeDisabled: |
32 resolver->reject(DOMException::create(InvalidStateError, "The credential
manager is disabled.")); | 32 resolver->reject(DOMException::create(InvalidStateError, "The credential
manager is disabled.")); |
33 break; | 33 break; |
34 case WebCredentialManagerError::ErrorTypeUnknown: | 34 case WebCredentialManagerError::ErrorTypeUnknown: |
35 default: | 35 default: |
36 resolver->reject(DOMException::create(NotReadableError, "An unknown erro
r occured while talking to the credential manager.")); | 36 resolver->reject(DOMException::create(NotReadableError, "An unknown erro
r occured while talking to the credential manager.")); |
37 break; | 37 break; |
38 } | 38 } |
39 } | 39 } |
40 | 40 |
41 class NotificationCallbacks : public WebCredentialManagerClient::NotificationCal
lbacks { | 41 class NotificationCallbacks : public WebCredentialManagerClient::NotificationCal
lbacks { |
42 WTF_MAKE_NONCOPYABLE(NotificationCallbacks); | 42 WTF_MAKE_NONCOPYABLE(NotificationCallbacks); |
43 public: | 43 public: |
44 explicit NotificationCallbacks(PassRefPtr<ScriptPromiseResolver> resolver) :
m_resolver(resolver) { } | 44 explicit NotificationCallbacks(PassRefPtrWillBeRawPtr<ScriptPromiseResolver>
resolver) : m_resolver(resolver) { } |
45 virtual ~NotificationCallbacks() { } | 45 virtual ~NotificationCallbacks() { } |
46 | 46 |
47 virtual void onSuccess() override | 47 virtual void onSuccess() override |
48 { | 48 { |
49 m_resolver->resolve(); | 49 m_resolver->resolve(); |
50 } | 50 } |
51 | 51 |
52 virtual void onError(WebCredentialManagerError* reason) override | 52 virtual void onError(WebCredentialManagerError* reason) override |
53 { | 53 { |
54 rejectDueToCredentialManagerError(m_resolver, reason); | 54 rejectDueToCredentialManagerError(m_resolver, reason); |
55 } | 55 } |
56 | 56 |
57 private: | 57 private: |
58 const RefPtr<ScriptPromiseResolver> m_resolver; | 58 const RefPtrWillBePersistent<ScriptPromiseResolver> m_resolver; |
59 }; | 59 }; |
60 | 60 |
61 class RequestCallbacks : public WebCredentialManagerClient::RequestCallbacks { | 61 class RequestCallbacks : public WebCredentialManagerClient::RequestCallbacks { |
62 WTF_MAKE_NONCOPYABLE(RequestCallbacks); | 62 WTF_MAKE_NONCOPYABLE(RequestCallbacks); |
63 public: | 63 public: |
64 explicit RequestCallbacks(PassRefPtr<ScriptPromiseResolver> resolver) : m_re
solver(resolver) { } | 64 explicit RequestCallbacks(PassRefPtrWillBeRawPtr<ScriptPromiseResolver> reso
lver) : m_resolver(resolver) { } |
65 virtual ~RequestCallbacks() { } | 65 virtual ~RequestCallbacks() { } |
66 | 66 |
67 virtual void onSuccess(WebCredential* credential) override | 67 virtual void onSuccess(WebCredential* credential) override |
68 { | 68 { |
69 if (!credential) { | 69 if (!credential) { |
70 m_resolver->resolve(); | 70 m_resolver->resolve(); |
71 return; | 71 return; |
72 } | 72 } |
73 | 73 |
74 ASSERT(credential->isLocalCredential() || credential->isFederatedCredent
ial()); | 74 ASSERT(credential->isLocalCredential() || credential->isFederatedCredent
ial()); |
75 if (credential->isLocalCredential()) | 75 if (credential->isLocalCredential()) |
76 m_resolver->resolve(LocalCredential::create(static_cast<WebLocalCred
ential*>(credential))); | 76 m_resolver->resolve(LocalCredential::create(static_cast<WebLocalCred
ential*>(credential))); |
77 else | 77 else |
78 m_resolver->resolve(FederatedCredential::create(static_cast<WebFeder
atedCredential*>(credential))); | 78 m_resolver->resolve(FederatedCredential::create(static_cast<WebFeder
atedCredential*>(credential))); |
79 } | 79 } |
80 | 80 |
81 virtual void onError(WebCredentialManagerError* reason) override | 81 virtual void onError(WebCredentialManagerError* reason) override |
82 { | 82 { |
83 rejectDueToCredentialManagerError(m_resolver, reason); | 83 rejectDueToCredentialManagerError(m_resolver, reason); |
84 } | 84 } |
85 | 85 |
86 private: | 86 private: |
87 const RefPtr<ScriptPromiseResolver> m_resolver; | 87 const RefPtrWillBePersistent<ScriptPromiseResolver> m_resolver; |
88 }; | 88 }; |
89 | 89 |
90 | 90 |
91 CredentialsContainer* CredentialsContainer::create() | 91 CredentialsContainer* CredentialsContainer::create() |
92 { | 92 { |
93 return new CredentialsContainer(); | 93 return new CredentialsContainer(); |
94 } | 94 } |
95 | 95 |
96 CredentialsContainer::CredentialsContainer() | 96 CredentialsContainer::CredentialsContainer() |
97 { | 97 { |
98 } | 98 } |
99 | 99 |
100 static bool checkBoilerplate(PassRefPtr<ScriptPromiseResolver> resolver) | 100 static bool checkBoilerplate(PassRefPtrWillBeRawPtr<ScriptPromiseResolver> resol
ver) |
101 { | 101 { |
102 CredentialManagerClient* client = CredentialManagerClient::from(resolver->sc
riptState()->executionContext()); | 102 CredentialManagerClient* client = CredentialManagerClient::from(resolver->sc
riptState()->executionContext()); |
103 if (!client) { | 103 if (!client) { |
104 resolver->reject(DOMException::create(InvalidStateError, "Could not esta
blish connection to the credential manager.")); | 104 resolver->reject(DOMException::create(InvalidStateError, "Could not esta
blish connection to the credential manager.")); |
105 return false; | 105 return false; |
106 } | 106 } |
107 | 107 |
108 SecurityOrigin* securityOrigin = resolver->scriptState()->executionContext()
->securityOrigin(); | 108 SecurityOrigin* securityOrigin = resolver->scriptState()->executionContext()
->securityOrigin(); |
109 String errorMessage; | 109 String errorMessage; |
110 if (!securityOrigin->canAccessFeatureRequiringSecureOrigin(errorMessage)) { | 110 if (!securityOrigin->canAccessFeatureRequiringSecureOrigin(errorMessage)) { |
111 resolver->reject(DOMException::create(SecurityError, errorMessage)); | 111 resolver->reject(DOMException::create(SecurityError, errorMessage)); |
112 return false; | 112 return false; |
113 } | 113 } |
114 | 114 |
115 return true; | 115 return true; |
116 } | 116 } |
117 | 117 |
118 ScriptPromise CredentialsContainer::request(ScriptState* scriptState, const Dict
ionary&) | 118 ScriptPromise CredentialsContainer::request(ScriptState* scriptState, const Dict
ionary&) |
119 { | 119 { |
120 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip
tState); | 120 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::
create(scriptState); |
121 ScriptPromise promise = resolver->promise(); | 121 ScriptPromise promise = resolver->promise(); |
122 if (!checkBoilerplate(resolver)) | 122 if (!checkBoilerplate(resolver)) |
123 return promise; | 123 return promise; |
124 | 124 |
125 WebVector<WebURL> tempVector; | 125 WebVector<WebURL> tempVector; |
126 CredentialManagerClient::from(scriptState->executionContext())->dispatchRequ
est(false, tempVector, new RequestCallbacks(resolver)); | 126 CredentialManagerClient::from(scriptState->executionContext())->dispatchRequ
est(false, tempVector, new RequestCallbacks(resolver)); |
127 return promise; | 127 return promise; |
128 } | 128 } |
129 | 129 |
130 ScriptPromise CredentialsContainer::notifySignedIn(ScriptState* scriptState, Cre
dential* credential) | 130 ScriptPromise CredentialsContainer::notifySignedIn(ScriptState* scriptState, Cre
dential* credential) |
131 { | 131 { |
132 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip
tState); | 132 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::
create(scriptState); |
133 ScriptPromise promise = resolver->promise(); | 133 ScriptPromise promise = resolver->promise(); |
134 if (!checkBoilerplate(resolver)) | 134 if (!checkBoilerplate(resolver)) |
135 return promise; | 135 return promise; |
136 | 136 |
137 CredentialManagerClient::from(scriptState->executionContext())->dispatchSign
edIn(WebCredential::create(credential->platformCredential()), new NotificationCa
llbacks(resolver)); | 137 CredentialManagerClient::from(scriptState->executionContext())->dispatchSign
edIn(WebCredential::create(credential->platformCredential()), new NotificationCa
llbacks(resolver)); |
138 return promise; | 138 return promise; |
139 } | 139 } |
140 | 140 |
141 ScriptPromise CredentialsContainer::notifyFailedSignIn(ScriptState* scriptState,
Credential* credential) | 141 ScriptPromise CredentialsContainer::notifyFailedSignIn(ScriptState* scriptState,
Credential* credential) |
142 { | 142 { |
143 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip
tState); | 143 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::
create(scriptState); |
144 ScriptPromise promise = resolver->promise(); | 144 ScriptPromise promise = resolver->promise(); |
145 if (!checkBoilerplate(resolver)) | 145 if (!checkBoilerplate(resolver)) |
146 return promise; | 146 return promise; |
147 | 147 |
148 CredentialManagerClient::from(scriptState->executionContext())->dispatchFail
edSignIn(WebCredential::create(credential->platformCredential()), new Notificati
onCallbacks(resolver)); | 148 CredentialManagerClient::from(scriptState->executionContext())->dispatchFail
edSignIn(WebCredential::create(credential->platformCredential()), new Notificati
onCallbacks(resolver)); |
149 return promise; | 149 return promise; |
150 } | 150 } |
151 | 151 |
152 ScriptPromise CredentialsContainer::notifySignedOut(ScriptState* scriptState) | 152 ScriptPromise CredentialsContainer::notifySignedOut(ScriptState* scriptState) |
153 { | 153 { |
154 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip
tState); | 154 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::
create(scriptState); |
155 ScriptPromise promise = resolver->promise(); | 155 ScriptPromise promise = resolver->promise(); |
156 if (!checkBoilerplate(resolver)) | 156 if (!checkBoilerplate(resolver)) |
157 return promise; | 157 return promise; |
158 | 158 |
159 CredentialManagerClient::from(scriptState->executionContext())->dispatchSign
edOut(new NotificationCallbacks(resolver)); | 159 CredentialManagerClient::from(scriptState->executionContext())->dispatchSign
edOut(new NotificationCallbacks(resolver)); |
160 return promise; | 160 return promise; |
161 } | 161 } |
162 | 162 |
163 } // namespace blink | 163 } // namespace blink |
OLD | NEW |