| Index: Source/modules/credentialmanager/CredentialsContainer.cpp
|
| diff --git a/Source/modules/credentialmanager/CredentialsContainer.cpp b/Source/modules/credentialmanager/CredentialsContainer.cpp
|
| index f6eaa7647f1b953908d32d988f49505380d1c1c3..3cdab4aecdba871af4deb9932aab47bfdd9f79e9 100644
|
| --- a/Source/modules/credentialmanager/CredentialsContainer.cpp
|
| +++ b/Source/modules/credentialmanager/CredentialsContainer.cpp
|
| @@ -12,17 +12,19 @@
|
| #include "core/dom/ExceptionCode.h"
|
| #include "core/dom/ExecutionContext.h"
|
| #include "modules/credentialmanager/Credential.h"
|
| +#include "modules/credentialmanager/CredentialManagerClient.h"
|
| +#include "modules/credentialmanager/LocalCredential.h"
|
| #include "platform/weborigin/SecurityOrigin.h"
|
| #include "public/platform/Platform.h"
|
| #include "public/platform/WebCredential.h"
|
| #include "public/platform/WebCredentialManagerClient.h"
|
| #include "public/platform/WebCredentialManagerError.h"
|
| +#include "public/platform/WebLocalCredential.h"
|
|
|
| namespace blink {
|
|
|
| static void rejectDueToCredentialManagerError(PassRefPtr<ScriptPromiseResolver> resolver, WebCredentialManagerError* reason)
|
| {
|
| -
|
| switch (reason->errorType) {
|
| case WebCredentialManagerError::ErrorTypeDisabled:
|
| resolver->reject(DOMException::create(InvalidStateError, "The credential manager is disabled."));
|
| @@ -62,8 +64,13 @@ public:
|
|
|
| virtual void onSuccess(WebCredential* credential) OVERRIDE
|
| {
|
| - // FIXME: Split this into Local/Federated types.
|
| - m_resolver->resolve(Credential::create(credential->id(), credential->name(), credential->avatarURL()));
|
| + if (!credential) {
|
| + m_resolver->resolve();
|
| + return;
|
| + }
|
| +
|
| + // FIXME: Split this into Local/Federated types. Right now it's hard-coded to be a LocalCredential. :(
|
| + m_resolver->resolve(LocalCredential::create(static_cast<WebLocalCredential*>(credential)));
|
| }
|
|
|
| virtual void onError(WebCredentialManagerError* reason) OVERRIDE
|
| @@ -85,47 +92,67 @@ CredentialsContainer::CredentialsContainer()
|
| {
|
| }
|
|
|
| -static bool canAccessCredentialManagerAPI(ScriptState* scriptState, PassRefPtr<ScriptPromiseResolver> resolver)
|
| +static bool checkBoilerplate(PassRefPtr<ScriptPromiseResolver> resolver)
|
| {
|
| - SecurityOrigin* securityOrigin = scriptState->executionContext()->securityOrigin();
|
| + CredentialManagerClient* client = CredentialManagerClient::from(resolver->scriptState()->executionContext());
|
| + if (!client) {
|
| + resolver->reject(DOMException::create(InvalidStateError, "Could not establish connection to the credential manager."));
|
| + return false;
|
| + }
|
| +
|
| + SecurityOrigin* securityOrigin = resolver->scriptState()->executionContext()->securityOrigin();
|
| String errorMessage;
|
| if (!securityOrigin->canAccessFeatureRequiringSecureOrigin(errorMessage)) {
|
| resolver->reject(DOMException::create(SecurityError, errorMessage));
|
| return false;
|
| }
|
| +
|
| return true;
|
| }
|
|
|
| -static ScriptPromise stubImplementation(ScriptState* scriptState)
|
| +ScriptPromise CredentialsContainer::request(ScriptState* scriptState, const Dictionary&)
|
| {
|
| RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scriptState);
|
| ScriptPromise promise = resolver->promise();
|
| -
|
| - if (!canAccessCredentialManagerAPI(scriptState, resolver))
|
| + if (!checkBoilerplate(resolver))
|
| return promise;
|
|
|
| - resolver->resolve();
|
| + WebVector<WebURL> tempVector;
|
| + CredentialManagerClient::from(scriptState->executionContext())->dispatchRequest(false, tempVector, new RequestCallbacks(resolver));
|
| return promise;
|
| }
|
|
|
| -ScriptPromise CredentialsContainer::request(ScriptState* scriptState, const Dictionary&)
|
| -{
|
| - return stubImplementation(scriptState);
|
| -}
|
| -
|
| ScriptPromise CredentialsContainer::notifySignedIn(ScriptState* scriptState, Credential* credential)
|
| {
|
| - return stubImplementation(scriptState);
|
| + RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scriptState);
|
| + ScriptPromise promise = resolver->promise();
|
| + if (!checkBoilerplate(resolver))
|
| + return promise;
|
| +
|
| + CredentialManagerClient::from(scriptState->executionContext())->dispatchSignedIn(WebCredential(credential->platformCredential()), new NotificationCallbacks(resolver));
|
| + return promise;
|
| }
|
|
|
| ScriptPromise CredentialsContainer::notifyFailedSignIn(ScriptState* scriptState, Credential* credential)
|
| {
|
| - return stubImplementation(scriptState);
|
| + RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scriptState);
|
| + ScriptPromise promise = resolver->promise();
|
| + if (!checkBoilerplate(resolver))
|
| + return promise;
|
| +
|
| + CredentialManagerClient::from(scriptState->executionContext())->dispatchFailedSignIn(WebCredential(credential->platformCredential()), new NotificationCallbacks(resolver));
|
| + return promise;
|
| }
|
|
|
| ScriptPromise CredentialsContainer::notifySignedOut(ScriptState* scriptState)
|
| {
|
| - return stubImplementation(scriptState);
|
| + RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scriptState);
|
| + ScriptPromise promise = resolver->promise();
|
| + if (!checkBoilerplate(resolver))
|
| + return promise;
|
| +
|
| + CredentialManagerClient::from(scriptState->executionContext())->dispatchSignedOut(new NotificationCallbacks(resolver));
|
| + return promise;
|
| }
|
|
|
| } // namespace blink
|
|
|