14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
24e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
34e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// found in the LICENSE file.
44e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#ifndef CredentialManagerClient_h
64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define CredentialManagerClient_h
74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "platform/Supplementable.h"
94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "public/platform/WebCredentialManagerClient.h"
104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "public/platform/WebVector.h"
114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace blink {
134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class ExecutionContext;
154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class KURL;
164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class Page;
174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class WebCredential;
184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class WebURL;
194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// CredentialManagerClient lives as a supplement to Page, and wraps the embedder-provided
214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// WebCredentialManagerClient's methods to make them visible to the bindings code.
224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class CredentialManagerClient FINAL : public NoBaseWillBeGarbageCollectedFinalized<CredentialManagerClient>, public WillBeHeapSupplement<Page> {
234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(CredentialManagerClient);
244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)public:
254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    explicit CredentialManagerClient(WebCredentialManagerClient*);
264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    virtual ~CredentialManagerClient();
274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    static const char* supplementName();
294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    static CredentialManagerClient* from(Page*);
304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    static CredentialManagerClient* from(ExecutionContext*);
314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    // Ownership of the callback is transferred to the callee for each of
334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    // the following methods.
344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    virtual void dispatchFailedSignIn(const WebCredential&, WebCredentialManagerClient::NotificationCallbacks*);
354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    virtual void dispatchSignedIn(const WebCredential&, WebCredentialManagerClient::NotificationCallbacks*);
364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    virtual void dispatchSignedOut(WebCredentialManagerClient::NotificationCallbacks*);
374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    virtual void dispatchRequest(bool zeroClickOnly, const WebVector<WebURL>& federations, WebCredentialManagerClient::RequestCallbacks*);
384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)private:
404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    WebCredentialManagerClient* m_client;
414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)};
424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void provideCredentialManagerClientTo(Page&, CredentialManagerClient*);
444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} // namespace blink
464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif // CredentialManagerClient_h
484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)