| Index: chrome/browser/service/service_process_control.h
|
| diff --git a/chrome/browser/service/service_process_control.h b/chrome/browser/service/service_process_control.h
|
| deleted file mode 100644
|
| index 88a27314b5ea1d5d41552c4125f892cf58e8acab..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/service/service_process_control.h
|
| +++ /dev/null
|
| @@ -1,219 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#ifndef CHROME_BROWSER_SERVICE_SERVICE_PROCESS_CONTROL_H_
|
| -#define CHROME_BROWSER_SERVICE_SERVICE_PROCESS_CONTROL_H_
|
| -
|
| -#include <queue>
|
| -#include <set>
|
| -#include <string>
|
| -#include <vector>
|
| -
|
| -#include "base/basictypes.h"
|
| -#include "base/callback.h"
|
| -#include "base/cancelable_callback.h"
|
| -#include "base/id_map.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/memory/singleton.h"
|
| -#include "base/process/process.h"
|
| -#include "content/public/browser/notification_observer.h"
|
| -#include "content/public/browser/notification_registrar.h"
|
| -#include "ipc/ipc_channel_proxy.h"
|
| -#include "ipc/ipc_listener.h"
|
| -#include "ipc/ipc_sender.h"
|
| -
|
| -class CommandLine;
|
| -
|
| -namespace cloud_print {
|
| -struct CloudPrintProxyInfo;
|
| -} // namespace cloud_print
|
| -
|
| -// A ServiceProcessControl works as a portal between the service process and
|
| -// the browser process.
|
| -//
|
| -// It is used to start and terminate the service process. It is also used
|
| -// to send and receive IPC messages from the service process.
|
| -//
|
| -// THREADING
|
| -//
|
| -// This class is accessed on the UI thread through some UI actions. It then
|
| -// talks to the IPC channel on the IO thread.
|
| -class ServiceProcessControl : public IPC::Sender,
|
| - public IPC::Listener,
|
| - public content::NotificationObserver {
|
| - public:
|
| - enum ServiceProcessEvent {
|
| - SERVICE_EVENT_INITIALIZE,
|
| - SERVICE_EVENT_ENABLED_ON_LAUNCH,
|
| - SERVICE_EVENT_ENABLE,
|
| - SERVICE_EVENT_DISABLE,
|
| - SERVICE_EVENT_DISABLE_BY_POLICY,
|
| - SERVICE_EVENT_LAUNCH,
|
| - SERVICE_EVENT_LAUNCHED,
|
| - SERVICE_EVENT_LAUNCH_FAILED,
|
| - SERVICE_EVENT_CHANNEL_CONNECTED,
|
| - SERVICE_EVENT_CHANNEL_ERROR,
|
| - SERVICE_EVENT_INFO_REQUEST,
|
| - SERVICE_EVENT_INFO_REPLY,
|
| - SERVICE_EVENT_HISTOGRAMS_REQUEST,
|
| - SERVICE_EVENT_HISTOGRAMS_REPLY,
|
| - SERVICE_EVENT_MAX,
|
| - };
|
| -
|
| - typedef IDMap<ServiceProcessControl>::iterator iterator;
|
| - typedef std::queue<IPC::Message> MessageQueue;
|
| - typedef base::Callback<void(const cloud_print::CloudPrintProxyInfo&)>
|
| - CloudPrintProxyInfoHandler;
|
| -
|
| - // Returns the singleton instance of this class.
|
| - static ServiceProcessControl* GetInstance();
|
| -
|
| - // Return true if this object is connected to the service.
|
| - // Virtual for testing.
|
| - virtual bool IsConnected() const;
|
| -
|
| - // If no service process is currently running, creates a new service process
|
| - // and connects to it. If a service process is already running this method
|
| - // will try to connect to it.
|
| - // |success_task| is called when we have successfully launched the process
|
| - // and connected to it.
|
| - // |failure_task| is called when we failed to connect to the service process.
|
| - // It is OK to pass the same value for |success_task| and |failure_task|. In
|
| - // this case, the task is invoked on success or failure.
|
| - // Note that if we are already connected to service process then
|
| - // |success_task| can be invoked in the context of the Launch call.
|
| - // Virtual for testing.
|
| - virtual void Launch(const base::Closure& success_task,
|
| - const base::Closure& failure_task);
|
| -
|
| - // Disconnect the IPC channel from the service process.
|
| - // Virtual for testing.
|
| - virtual void Disconnect();
|
| -
|
| - // IPC::Listener implementation.
|
| - virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
|
| - virtual void OnChannelConnected(int32 peer_pid) OVERRIDE;
|
| - virtual void OnChannelError() OVERRIDE;
|
| -
|
| - // IPC::Sender implementation
|
| - virtual bool Send(IPC::Message* message) OVERRIDE;
|
| -
|
| - // content::NotificationObserver implementation.
|
| - virtual void Observe(int type,
|
| - const content::NotificationSource& source,
|
| - const content::NotificationDetails& details) OVERRIDE;
|
| -
|
| - // Send a shutdown message to the service process. IPC channel will be
|
| - // destroyed after calling this method.
|
| - // Return true if the message was sent.
|
| - // Virtual for testing.
|
| - virtual bool Shutdown();
|
| -
|
| - // Send request for cloud print proxy info (enabled state, email, proxy id).
|
| - // The callback gets the information when received.
|
| - // Returns true if request was sent. Callback will be called only in case of
|
| - // reply from service. The method resets any previous callback.
|
| - // This call starts service if needed.
|
| - bool GetCloudPrintProxyInfo(
|
| - const CloudPrintProxyInfoHandler& cloud_print_status_callback);
|
| -
|
| - // Send request for histograms collected in service process.
|
| - // Returns true if request was sent, and callback will be called in case of
|
| - // success or timeout. The method resets any previous callback.
|
| - // Returns false if service is not running or other failure, callback will not
|
| - // be called in this case.
|
| - bool GetHistograms(const base::Closure& cloud_print_status_callback,
|
| - const base::TimeDelta& timeout);
|
| -
|
| - private:
|
| - // This class is responsible for launching the service process on the
|
| - // PROCESS_LAUNCHER thread.
|
| - class Launcher
|
| - : public base::RefCountedThreadSafe<ServiceProcessControl::Launcher> {
|
| - public:
|
| - Launcher(ServiceProcessControl* process, CommandLine* cmd_line);
|
| - // Execute the command line to start the process asynchronously. After the
|
| - // command is executed |task| is called with the process handle on the UI
|
| - // thread.
|
| - void Run(const base::Closure& task);
|
| -
|
| - bool launched() const { return launched_; }
|
| -
|
| - private:
|
| - friend class base::RefCountedThreadSafe<ServiceProcessControl::Launcher>;
|
| - virtual ~Launcher();
|
| -
|
| -#if !defined(OS_MACOSX)
|
| - void DoDetectLaunched();
|
| -#endif // !OS_MACOSX
|
| -
|
| - void DoRun();
|
| - void Notify();
|
| - void CloseProcessHandle();
|
| - ServiceProcessControl* process_;
|
| - scoped_ptr<CommandLine> cmd_line_;
|
| - base::Closure notify_task_;
|
| - bool launched_;
|
| - uint32 retry_count_;
|
| - base::ProcessHandle process_handle_;
|
| - };
|
| -
|
| - friend class MockServiceProcessControl;
|
| - friend class CloudPrintProxyPolicyStartupTest;
|
| -
|
| - ServiceProcessControl();
|
| - virtual ~ServiceProcessControl();
|
| -
|
| - friend struct DefaultSingletonTraits<ServiceProcessControl>;
|
| -
|
| - typedef std::vector<base::Closure> TaskList;
|
| -
|
| - // Message handlers
|
| - void OnCloudPrintProxyInfo(
|
| - const cloud_print::CloudPrintProxyInfo& proxy_info);
|
| - void OnHistograms(const std::vector<std::string>& pickled_histograms);
|
| -
|
| - // Runs callback provided in |GetHistograms()|.
|
| - void RunHistogramsCallback();
|
| -
|
| - // Helper method to invoke all the callbacks based on success or failure.
|
| - void RunConnectDoneTasks();
|
| -
|
| - // Method called by Launcher when the service process is launched.
|
| - void OnProcessLaunched();
|
| -
|
| - // Used internally to connect to the service process.
|
| - void ConnectInternal();
|
| -
|
| - // Takes ownership of the pointer. Split out for testing.
|
| - void SetChannel(IPC::ChannelProxy* channel);
|
| -
|
| - static void RunAllTasksHelper(TaskList* task_list);
|
| -
|
| - // IPC channel to the service process.
|
| - scoped_ptr<IPC::ChannelProxy> channel_;
|
| -
|
| - // Service process launcher.
|
| - scoped_refptr<Launcher> launcher_;
|
| -
|
| - // Callbacks that get invoked when the channel is successfully connected.
|
| - TaskList connect_success_tasks_;
|
| - // Callbacks that get invoked when there was a connection failure.
|
| - TaskList connect_failure_tasks_;
|
| -
|
| - // Callback that gets invoked when a status message is received from
|
| - // the cloud print proxy.
|
| - CloudPrintProxyInfoHandler cloud_print_info_callback_;
|
| -
|
| - // Callback that gets invoked when a message with histograms is received from
|
| - // the service process.
|
| - base::Closure histograms_callback_;
|
| -
|
| - content::NotificationRegistrar registrar_;
|
| -
|
| - // Callback that gets invoked if service didn't reply in time.
|
| - base::CancelableClosure histograms_timeout_callback_;
|
| -};
|
| -
|
| -#endif // CHROME_BROWSER_SERVICE_SERVICE_PROCESS_CONTROL_H_
|
|
|