Home | History | Annotate | Download | only in media
      1 // Copyright 2013 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 CONTENT_RENDERER_MEDIA_WEBRTC_IDENTITY_SERVICE_H_
      6 #define CONTENT_RENDERER_MEDIA_WEBRTC_IDENTITY_SERVICE_H_
      7 
      8 #include <deque>
      9 #include <string>
     10 
     11 #include "base/basictypes.h"
     12 #include "base/callback.h"
     13 #include "content/common/content_export.h"
     14 #include "content/public/renderer/render_process_observer.h"
     15 #include "url/gurl.h"
     16 
     17 namespace content {
     18 
     19 // This class handles WebRTC DTLS identity requests by sending IPC messages to
     20 // the browser process. Only one request is sent to the browser at a time; other
     21 // requests are queued and have to wait for the outstanding request to complete.
     22 class CONTENT_EXPORT WebRTCIdentityService : public RenderProcessObserver {
     23  public:
     24   typedef base::Callback<
     25       void(const std::string& certificate, const std::string& private_key)>
     26       SuccessCallback;
     27 
     28   typedef base::Callback<void(int error)> FailureCallback;
     29 
     30   WebRTCIdentityService();
     31   virtual ~WebRTCIdentityService();
     32 
     33   // Sends an identity request.
     34   //
     35   // |origin| is the origin of the caller;
     36   // |identity_name| and |common_name| have the same meaning as in
     37   // webrtc::DTLSIdentityServiceInterface::RequestIdentity;
     38   // |success_callback| is the callback if the identity is successfully
     39   // returned;
     40   // |failure_callback| is the callback if the identity request fails.
     41   //
     42   // The request id is returned. It's unique within the renderer and can be used
     43   // to cancel the request.
     44   int RequestIdentity(const GURL& origin,
     45                       const std::string& identity_name,
     46                       const std::string& common_name,
     47                       const SuccessCallback& success_callback,
     48                       const FailureCallback& failure_callback);
     49 
     50   // Cancels a previous request and the callbacks will not be called.
     51   // If the |request_id| is not associated with the
     52   // outstanding request or any queued request, this method does nothing.
     53   //
     54   // |request_id| is the request id returned from RequestIdentity.
     55   void CancelRequest(int request_id);
     56 
     57  protected:
     58   // For unittest to override.
     59   virtual bool Send(IPC::Message* message);
     60   // RenderProcessObserver implementation. Protected for testing.
     61   virtual bool OnControlMessageReceived(const IPC::Message& message) OVERRIDE;
     62 
     63  private:
     64   struct RequestInfo {
     65     RequestInfo(int request_id,
     66                 const GURL& origin,
     67                 const std::string& identity_name,
     68                 const std::string& common_name,
     69                 const SuccessCallback& success_callback,
     70                 const FailureCallback& failure_callback);
     71     ~RequestInfo();
     72 
     73     int request_id;
     74     GURL origin;
     75     std::string identity_name;
     76     std::string common_name;
     77     SuccessCallback success_callback;
     78     FailureCallback failure_callback;
     79   };
     80 
     81   // IPC message handlers.
     82   void OnIdentityReady(int request_id,
     83                        const std::string& certificate,
     84                        const std::string& private_key);
     85   void OnRequestFailed(int request_id, int error);
     86 
     87   void SendRequest(const RequestInfo& request_info);
     88   void OnOutstandingRequestReturned();
     89 
     90   std::deque<RequestInfo> pending_requests_;
     91   int next_request_id_;
     92 
     93   DISALLOW_COPY_AND_ASSIGN(WebRTCIdentityService);
     94 };
     95 
     96 }  // namespace content
     97 
     98 #endif  // CONTENT_RENDERER_MEDIA_WEBRTC_IDENTITY_SERVICE_H_
     99