Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / components / password_manager / content / renderer / credential_manager_client.h
blob3382c23ea88169578770be0367dc34adf1e8a5c7
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
3 // found in the LICENSE file.
5 #ifndef COMPONENTS_PASSWORD_MANAGER_CONTENT_RENDERER_CREDENTIAL_MANAGER_CLIENT_H_
6 #define COMPONENTS_PASSWORD_MANAGER_CONTENT_RENDERER_CREDENTIAL_MANAGER_CLIENT_H_
8 #include "base/basictypes.h"
9 #include "base/compiler_specific.h"
10 #include "base/id_map.h"
11 #include "content/public/renderer/render_view_observer.h"
12 #include "ipc/ipc_listener.h"
13 #include "third_party/WebKit/public/platform/WebCredentialManagerClient.h"
14 #include "third_party/WebKit/public/platform/WebCredentialManagerError.h"
15 #include "third_party/WebKit/public/platform/WebVector.h"
17 namespace blink {
18 class WebCredential;
19 class WebURL;
22 namespace content {
23 class RenderView;
26 namespace password_manager {
28 struct CredentialInfo;
30 // The CredentialManagerClient implements the Blink platform interface
31 // WebCredentialManagerClient, and acts as an intermediary between Blink-side
32 // calls to 'navigator.credential.*' and the password manager internals which
33 // live in the browser process.
35 // One instance of CredentialManagerClient is created per RenderThread,
36 // held in a scoped_ptr on ChromeContentRendererClient. The client holds
37 // a raw pointer to the RenderThread on which it lives, and uses that pointer
38 // to send messages to the browser process, and to route responses to itself.
40 // When the render thread is shut down (or the client is destructed), the
41 // routing is removed, the pointer is cleared, and any pending responses are
42 // rejected.
44 // Note that each RenderView's WebView holds a pointer to the
45 // CredentialManagerClient (set in 'OnRenderViewCreated()'). The client is
46 // guaranteed to outlive the views that point to it.
47 class CredentialManagerClient : public blink::WebCredentialManagerClient,
48 public content::RenderViewObserver {
49 public:
50 explicit CredentialManagerClient(content::RenderView* render_view);
51 ~CredentialManagerClient() override;
53 // RenderViewObserver:
54 bool OnMessageReceived(const IPC::Message& message) override;
56 // Message handlers for messages from the browser process:
57 virtual void OnAcknowledgeStore(int request_id);
58 virtual void OnAcknowledgeRequireUserMediation(int request_id);
59 virtual void OnSendCredential(int request_id,
60 const CredentialInfo& credential_info);
61 virtual void OnRejectCredentialRequest(
62 int request_id,
63 blink::WebCredentialManagerError::ErrorType error_type);
65 // blink::WebCredentialManager:
66 virtual void dispatchStore(
67 const blink::WebCredential& credential,
68 WebCredentialManagerClient::NotificationCallbacks* callbacks);
69 virtual void dispatchRequireUserMediation(NotificationCallbacks* callbacks);
70 virtual void dispatchGet(bool zero_click_only,
71 const blink::WebVector<blink::WebURL>& federations,
72 RequestCallbacks* callbacks);
74 private:
75 typedef IDMap<blink::WebCredentialManagerClient::RequestCallbacks,
76 IDMapOwnPointer> RequestCallbacksMap;
77 typedef IDMap<blink::WebCredentialManagerClient::NotificationCallbacks,
78 IDMapOwnPointer> NotificationCallbacksMap;
80 void RespondToNotificationCallback(int request_id,
81 NotificationCallbacksMap* map);
83 // Track the various blink::WebCredentialManagerClient::*Callbacks objects
84 // generated from Blink. This class takes ownership of these objects.
85 NotificationCallbacksMap failed_sign_in_callbacks_;
86 NotificationCallbacksMap store_callbacks_;
87 NotificationCallbacksMap require_user_mediation_callbacks_;
88 RequestCallbacksMap get_callbacks_;
90 DISALLOW_COPY_AND_ASSIGN(CredentialManagerClient);
93 } // namespace password_manager
95 #endif // COMPONENTS_PASSWORD_MANAGER_CONTENT_RENDERER_CREDENTIAL_MANAGER_CLIENT_H_