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

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

Issue 2815313002: Reland of Move ScriptState::GetExecutionContext (Part 5) (Closed)
Patch Set: Created 3 years, 8 months 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 "modules/credentialmanager/CredentialsContainer.h" 5 #include "modules/credentialmanager/CredentialsContainer.h"
6 6
7 #include <memory> 7 #include <memory>
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"
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 : public WebCredentialManagerClient::NotificationCallbacks { 58 : public WebCredentialManagerClient::NotificationCallbacks {
59 WTF_MAKE_NONCOPYABLE(NotificationCallbacks); 59 WTF_MAKE_NONCOPYABLE(NotificationCallbacks);
60 60
61 public: 61 public:
62 explicit NotificationCallbacks(ScriptPromiseResolver* resolver) 62 explicit NotificationCallbacks(ScriptPromiseResolver* resolver)
63 : resolver_(resolver) {} 63 : resolver_(resolver) {}
64 ~NotificationCallbacks() override {} 64 ~NotificationCallbacks() override {}
65 65
66 void OnSuccess() override { 66 void OnSuccess() override {
67 Frame* frame = 67 Frame* frame =
68 ToDocument(resolver_->GetScriptState()->GetExecutionContext()) 68 ToDocument(ExecutionContext::From(resolver_->GetScriptState()))
69 ->GetFrame(); 69 ->GetFrame();
70 SECURITY_CHECK(!frame || frame == frame->Tree().Top()); 70 SECURITY_CHECK(!frame || frame == frame->Tree().Top());
71 71
72 resolver_->Resolve(); 72 resolver_->Resolve();
73 } 73 }
74 74
75 void OnError(WebCredentialManagerError reason) override { 75 void OnError(WebCredentialManagerError reason) override {
76 RejectDueToCredentialManagerError(resolver_, reason); 76 RejectDueToCredentialManagerError(resolver_, reason);
77 } 77 }
78 78
79 private: 79 private:
80 const Persistent<ScriptPromiseResolver> resolver_; 80 const Persistent<ScriptPromiseResolver> resolver_;
81 }; 81 };
82 82
83 class RequestCallbacks : public WebCredentialManagerClient::RequestCallbacks { 83 class RequestCallbacks : public WebCredentialManagerClient::RequestCallbacks {
84 WTF_MAKE_NONCOPYABLE(RequestCallbacks); 84 WTF_MAKE_NONCOPYABLE(RequestCallbacks);
85 85
86 public: 86 public:
87 explicit RequestCallbacks(ScriptPromiseResolver* resolver) 87 explicit RequestCallbacks(ScriptPromiseResolver* resolver)
88 : resolver_(resolver) {} 88 : resolver_(resolver) {}
89 ~RequestCallbacks() override {} 89 ~RequestCallbacks() override {}
90 90
91 void OnSuccess(std::unique_ptr<WebCredential> web_credential) override { 91 void OnSuccess(std::unique_ptr<WebCredential> web_credential) override {
92 Frame* frame = 92 Frame* frame =
93 ToDocument(resolver_->GetScriptState()->GetExecutionContext()) 93 ToDocument(ExecutionContext::From(resolver_->GetScriptState()))
94 ->GetFrame(); 94 ->GetFrame();
95 SECURITY_CHECK(!frame || frame == frame->Tree().Top()); 95 SECURITY_CHECK(!frame || frame == frame->Tree().Top());
96 96
97 std::unique_ptr<WebCredential> credential = 97 std::unique_ptr<WebCredential> credential =
98 WTF::WrapUnique(web_credential.release()); 98 WTF::WrapUnique(web_credential.release());
99 if (!credential || !frame) { 99 if (!credential || !frame) {
100 resolver_->Resolve(); 100 resolver_->Resolve();
101 return; 101 return;
102 } 102 }
103 103
104 ASSERT(credential->IsPasswordCredential() || 104 ASSERT(credential->IsPasswordCredential() ||
105 credential->IsFederatedCredential()); 105 credential->IsFederatedCredential());
106 UseCounter::Count(resolver_->GetScriptState()->GetExecutionContext(), 106 UseCounter::Count(ExecutionContext::From(resolver_->GetScriptState()),
107 UseCounter::kCredentialManagerGetReturnedCredential); 107 UseCounter::kCredentialManagerGetReturnedCredential);
108 if (credential->IsPasswordCredential()) 108 if (credential->IsPasswordCredential())
109 resolver_->Resolve(PasswordCredential::Create( 109 resolver_->Resolve(PasswordCredential::Create(
110 static_cast<WebPasswordCredential*>(credential.get()))); 110 static_cast<WebPasswordCredential*>(credential.get())));
111 else 111 else
112 resolver_->Resolve(FederatedCredential::Create( 112 resolver_->Resolve(FederatedCredential::Create(
113 static_cast<WebFederatedCredential*>(credential.get()))); 113 static_cast<WebFederatedCredential*>(credential.get())));
114 } 114 }
115 115
116 void OnError(WebCredentialManagerError reason) override { 116 void OnError(WebCredentialManagerError reason) override {
117 RejectDueToCredentialManagerError(resolver_, reason); 117 RejectDueToCredentialManagerError(resolver_, reason);
118 } 118 }
119 119
120 private: 120 private:
121 const Persistent<ScriptPromiseResolver> resolver_; 121 const Persistent<ScriptPromiseResolver> resolver_;
122 }; 122 };
123 123
124 CredentialsContainer* CredentialsContainer::Create() { 124 CredentialsContainer* CredentialsContainer::Create() {
125 return new CredentialsContainer(); 125 return new CredentialsContainer();
126 } 126 }
127 127
128 CredentialsContainer::CredentialsContainer() {} 128 CredentialsContainer::CredentialsContainer() {}
129 129
130 static bool CheckBoilerplate(ScriptPromiseResolver* resolver) { 130 static bool CheckBoilerplate(ScriptPromiseResolver* resolver) {
131 Frame* frame = 131 Frame* frame = ToDocument(ExecutionContext::From(resolver->GetScriptState()))
132 ToDocument(resolver->GetScriptState()->GetExecutionContext())->GetFrame(); 132 ->GetFrame();
133 if (!frame || frame != frame->Tree().Top()) { 133 if (!frame || frame != frame->Tree().Top()) {
134 resolver->Reject(DOMException::Create(kSecurityError, 134 resolver->Reject(DOMException::Create(kSecurityError,
135 "CredentialContainer methods may " 135 "CredentialContainer methods may "
136 "only be executed in a top-level " 136 "only be executed in a top-level "
137 "document.")); 137 "document."));
138 return false; 138 return false;
139 } 139 }
140 140
141 String error_message; 141 String error_message;
142 if (!resolver->GetScriptState()->GetExecutionContext()->IsSecureContext( 142 if (!ExecutionContext::From(resolver->GetScriptState())
143 error_message)) { 143 ->IsSecureContext(error_message)) {
144 resolver->Reject(DOMException::Create(kSecurityError, error_message)); 144 resolver->Reject(DOMException::Create(kSecurityError, error_message));
145 return false; 145 return false;
146 } 146 }
147 147
148 CredentialManagerClient* client = CredentialManagerClient::From( 148 CredentialManagerClient* client = CredentialManagerClient::From(
149 resolver->GetScriptState()->GetExecutionContext()); 149 ExecutionContext::From(resolver->GetScriptState()));
150 if (!client) { 150 if (!client) {
151 resolver->Reject(DOMException::Create( 151 resolver->Reject(DOMException::Create(
152 kInvalidStateError, 152 kInvalidStateError,
153 "Could not establish connection to the credential manager.")); 153 "Could not establish connection to the credential manager."));
154 return false; 154 return false;
155 } 155 }
156 156
157 return true; 157 return true;
158 } 158 }
159 159
(...skipping 14 matching lines...) Expand all
174 // looping. In order to avoid this crazyness for the moment, we're making a 174 // looping. In order to avoid this crazyness for the moment, we're making a
175 // copy of the vector. https://crbug.com/587088 175 // copy of the vector. https://crbug.com/587088
176 const Vector<String> provider_strings = options.federated().providers(); 176 const Vector<String> provider_strings = options.federated().providers();
177 for (const auto& string : provider_strings) { 177 for (const auto& string : provider_strings) {
178 KURL url = KURL(KURL(), string); 178 KURL url = KURL(KURL(), string);
179 if (url.IsValid()) 179 if (url.IsValid())
180 providers.push_back(url); 180 providers.push_back(url);
181 } 181 }
182 } 182 }
183 183
184 UseCounter::Count(script_state->GetExecutionContext(), 184 UseCounter::Count(ExecutionContext::From(script_state),
185 options.unmediated() 185 options.unmediated()
186 ? UseCounter::kCredentialManagerGetWithoutUI 186 ? UseCounter::kCredentialManagerGetWithoutUI
187 : UseCounter::kCredentialManagerGetWithUI); 187 : UseCounter::kCredentialManagerGetWithUI);
188 188
189 CredentialManagerClient::From(script_state->GetExecutionContext()) 189 CredentialManagerClient::From(ExecutionContext::From(script_state))
190 ->DispatchGet(options.unmediated(), options.password(), providers, 190 ->DispatchGet(options.unmediated(), options.password(), providers,
191 new RequestCallbacks(resolver)); 191 new RequestCallbacks(resolver));
192 return promise; 192 return promise;
193 } 193 }
194 194
195 ScriptPromise CredentialsContainer::store(ScriptState* script_state, 195 ScriptPromise CredentialsContainer::store(ScriptState* script_state,
196 Credential* credential) { 196 Credential* credential) {
197 ScriptPromiseResolver* resolver = ScriptPromiseResolver::Create(script_state); 197 ScriptPromiseResolver* resolver = ScriptPromiseResolver::Create(script_state);
198 ScriptPromise promise = resolver->Promise(); 198 ScriptPromise promise = resolver->Promise();
199 if (!CheckBoilerplate(resolver)) 199 if (!CheckBoilerplate(resolver))
200 return promise; 200 return promise;
201 201
202 auto web_credential = 202 auto web_credential =
203 WebCredential::Create(credential->GetPlatformCredential()); 203 WebCredential::Create(credential->GetPlatformCredential());
204 CredentialManagerClient::From(script_state->GetExecutionContext()) 204 CredentialManagerClient::From(ExecutionContext::From(script_state))
205 ->DispatchStore(*web_credential, new NotificationCallbacks(resolver)); 205 ->DispatchStore(*web_credential, new NotificationCallbacks(resolver));
206 return promise; 206 return promise;
207 } 207 }
208 208
209 ScriptPromise CredentialsContainer::requireUserMediation( 209 ScriptPromise CredentialsContainer::requireUserMediation(
210 ScriptState* script_state) { 210 ScriptState* script_state) {
211 ScriptPromiseResolver* resolver = ScriptPromiseResolver::Create(script_state); 211 ScriptPromiseResolver* resolver = ScriptPromiseResolver::Create(script_state);
212 ScriptPromise promise = resolver->Promise(); 212 ScriptPromise promise = resolver->Promise();
213 if (!CheckBoilerplate(resolver)) 213 if (!CheckBoilerplate(resolver))
214 return promise; 214 return promise;
215 215
216 CredentialManagerClient::From(script_state->GetExecutionContext()) 216 CredentialManagerClient::From(ExecutionContext::From(script_state))
217 ->DispatchRequireUserMediation(new NotificationCallbacks(resolver)); 217 ->DispatchRequireUserMediation(new NotificationCallbacks(resolver));
218 return promise; 218 return promise;
219 } 219 }
220 220
221 } // namespace blink 221 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698