Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(448)

Side by Side Diff: Source/modules/credentialmanager/CredentialsContainer.cpp

Issue 783423003: Make ScriptPromiseResolver RefCountedWillBeRefCountedGarbageCollected. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698