Home | History | Annotate | Download | only in service
      1 // Copyright (c) 2012 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 CHROME_SERVICE_SERVICE_IPC_SERVER_H_
      6 #define CHROME_SERVICE_SERVICE_IPC_SERVER_H_
      7 
      8 #include <string>
      9 #include <vector>
     10 
     11 #include "base/memory/scoped_ptr.h"
     12 #include "ipc/ipc_channel_handle.h"
     13 #include "ipc/ipc_listener.h"
     14 #include "ipc/ipc_sync_channel.h"
     15 #include "ipc/ipc_sync_message_filter.h"
     16 #include "ipc/ipc_sender.h"
     17 
     18 namespace base {
     19 
     20 class DictionaryValue;
     21 class HistogramDeltaSerialization;
     22 
     23 }  // namespace base
     24 
     25 // This class handles IPC commands for the service process.
     26 class ServiceIPCServer : public IPC::Listener, public IPC::Sender {
     27  public:
     28   explicit ServiceIPCServer(const IPC::ChannelHandle& handle);
     29   virtual ~ServiceIPCServer();
     30 
     31   bool Init();
     32 
     33   // IPC::Sender implementation.
     34   virtual bool Send(IPC::Message* msg) OVERRIDE;
     35 
     36   IPC::SyncChannel* channel() { return channel_.get(); }
     37 
     38   // Safe to call on any thread, as long as it's guaranteed that the thread's
     39   // lifetime is less than the main thread.
     40   IPC::SyncMessageFilter* sync_message_filter() {
     41     return sync_message_filter_.get();
     42   }
     43 
     44   bool is_client_connected() const { return client_connected_; }
     45 
     46 
     47  private:
     48   friend class MockServiceIPCServer;
     49 
     50   // IPC::Listener implementation.
     51   virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
     52   virtual void OnChannelConnected(int32 peer_pid) OVERRIDE;
     53   virtual void OnChannelError() OVERRIDE;
     54 
     55   // IPC message handlers.
     56   void OnEnableCloudPrintProxyWithRobot(
     57       const std::string& robot_auth_code,
     58       const std::string& robot_email,
     59       const std::string& user_email,
     60       const base::DictionaryValue& user_settings);
     61   void OnGetCloudPrintProxyInfo();
     62   void OnGetHistograms();
     63   void OnDisableCloudPrintProxy();
     64 
     65   void OnShutdown();
     66   void OnUpdateAvailable();
     67 
     68   // Helper method to create the sync channel.
     69   void CreateChannel();
     70 
     71   IPC::ChannelHandle channel_handle_;
     72   scoped_ptr<IPC::SyncChannel> channel_;
     73   // Indicates whether a client is currently connected to the channel.
     74   bool client_connected_;
     75 
     76   // Allows threads other than the main thread to send sync messages.
     77   scoped_refptr<IPC::SyncMessageFilter> sync_message_filter_;
     78 
     79   // Calculates histograms deltas.
     80   scoped_ptr<base::HistogramDeltaSerialization> histogram_delta_serializer_;
     81 
     82   DISALLOW_COPY_AND_ASSIGN(ServiceIPCServer);
     83 };
     84 
     85 #endif  // CHROME_SERVICE_SERVICE_IPC_SERVER_H_
     86