c8a642f399f2e9404f3412c461684cc7122c4fd8
[platform/framework/web/crosswalk.git] / src / components / password_manager / content / renderer / credential_manager_client.h
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.
4
5 #ifndef COMPONENTS_PASSWORD_MANAGER_CONTENT_RENDERER_CREDENTIAL_MANAGER_CLIENT_H_
6 #define COMPONENTS_PASSWORD_MANAGER_CONTENT_RENDERER_CREDENTIAL_MANAGER_CLIENT_H_
7
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/WebVector.h"
15
16 namespace blink {
17 class WebCredential;
18 class WebURL;
19 }
20
21 namespace content {
22 class RenderThread;
23 class RenderView;
24 }
25
26 namespace password_manager {
27
28 struct CredentialInfo;
29
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.
34 //
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.
39 //
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.
43 //
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   virtual ~CredentialManagerClient();
52
53   // RenderViewObserver:
54   virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
55
56   // Message handlers for messages from the browser process:
57   virtual void OnAcknowledgeFailedSignIn(int request_id);
58   virtual void OnAcknowledgeSignedIn(int request_id);
59   virtual void OnAcknowledgeSignedOut(int request_id);
60   virtual void OnSendCredential(int request_id,
61                                 const CredentialInfo& credential_info);
62
63   // blink::WebCredentialManager:
64   virtual void dispatchFailedSignIn(
65       const blink::WebCredential& credential,
66       WebCredentialManagerClient::NotificationCallbacks* callbacks) OVERRIDE;
67   virtual void dispatchSignedIn(
68       const blink::WebCredential& credential,
69       WebCredentialManagerClient::NotificationCallbacks* callbacks) OVERRIDE;
70   virtual void dispatchSignedOut(NotificationCallbacks* callbacks) OVERRIDE;
71   virtual void dispatchRequest(
72       bool zero_click_only,
73       const blink::WebVector<blink::WebURL>& federations,
74       RequestCallbacks* callbacks) OVERRIDE;
75
76  private:
77   typedef IDMap<blink::WebCredentialManagerClient::RequestCallbacks,
78                 IDMapOwnPointer> RequestCallbacksMap;
79   typedef IDMap<blink::WebCredentialManagerClient::NotificationCallbacks,
80                 IDMapOwnPointer> NotificationCallbacksMap;
81
82   void RespondToNotificationCallback(int request_id,
83                                      NotificationCallbacksMap* map);
84
85   // Track the various blink::WebCredentialManagerClient::*Callbacks objects
86   // generated from Blink. This class takes ownership of these objects.
87   NotificationCallbacksMap failed_sign_in_callbacks_;
88   NotificationCallbacksMap signed_in_callbacks_;
89   NotificationCallbacksMap signed_out_callbacks_;
90   RequestCallbacksMap request_callbacks_;
91
92   DISALLOW_COPY_AND_ASSIGN(CredentialManagerClient);
93 };
94
95 }  // namespace password_manager
96
97 #endif  // COMPONENTS_PASSWORD_MANAGER_CONTENT_RENDERER_CREDENTIAL_MANAGER_CLIENT_H_