| Index: chrome/service/service_main.cc
|
| ===================================================================
|
| --- chrome/service/service_main.cc (revision 55524)
|
| +++ chrome/service/service_main.cc (working copy)
|
| @@ -11,6 +11,22 @@
|
| #include "chrome/service/cloud_print/cloud_print_proxy.h"
|
| #include "chrome/service/service_process.h"
|
|
|
| +#if defined(ENABLE_REMOTING)
|
| +#include "remoting/host/json_host_config.h"
|
| +#include "remoting/host/chromoting_host.h"
|
| +#include "remoting/host/chromoting_host_context.h"
|
| +
|
| +// This method is called as a signal that the Chromoting Host Process is
|
| +// shutting down because of failure or a request made by the user.
|
| +// We'll then post a task to |message_loop| to stop the chromoting host
|
| +// context to finish the final cleanup.
|
| +static void OnChromotingHostShutdown(
|
| + MessageLoop* message_loop, remoting::ChromotingHostContext* context) {
|
| + message_loop->PostTask(FROM_HERE,
|
| + NewRunnableMethod(context, &remoting::ChromotingHostContext::Stop));
|
| +}
|
| +#endif
|
| +
|
| // Mainline routine for running as the service process.
|
| int ServiceProcessMain(const MainFunctionParams& parameters) {
|
| MessageLoopForUI main_message_loop;
|
| @@ -24,7 +40,7 @@
|
| #endif // defined(OS_WIN)
|
|
|
| ServiceProcess service_process;
|
| - service_process.Initialize(&main_message_loop);
|
| + service_process.Initialize();
|
|
|
| // Enable Cloud Print if needed.
|
| if (parameters.command_line_.HasSwitch(switches::kEnableCloudPrintProxy)) {
|
| @@ -34,7 +50,47 @@
|
| service_process.GetCloudPrintProxy()->EnableForUser(lsid);
|
| }
|
|
|
| +#if defined(ENABLE_REMOTING)
|
| + // Enable Chromoting Host if needed.
|
| + // TODO(hclam): Merge this config file with Cloud Printing.
|
| + // TODO(hclam): There is only start but not stop of the chromoting host
|
| + // process.
|
| + FilePath user_data_dir;
|
| + PathService::Get(chrome::DIR_USER_DATA, &user_data_dir);
|
| + FilePath chromoting_config_path =
|
| + user_data_dir.Append(FILE_PATH_LITERAL(".ChromotingConfig.json"));
|
| + scoped_refptr<remoting::JsonHostConfig> chromoting_config;
|
| + scoped_ptr<remoting::ChromotingHostContext> chromoting_context;
|
| + scoped_refptr<remoting::ChromotingHost> chromoting_host;
|
| + if (parameters.command_line_.HasSwitch(switches::kEnableRemoting)) {
|
| + chromoting_config = new remoting::JsonHostConfig(
|
| + chromoting_config_path,
|
| + service_process.file_thread()->message_loop_proxy());
|
| + if (!chromoting_config->Read()) {
|
| + LOG(ERROR) << "Failed to read chromoting config file.";
|
| + } else {
|
| + chromoting_context.reset(new remoting::ChromotingHostContext());
|
| +
|
| + // Create the Chromoting Host Process with the context and config.
|
| + chromoting_host = service_process.CreateChromotingHost(
|
| + chromoting_context.get(), chromoting_config);
|
| +
|
| + // And start the context and the host process.
|
| + chromoting_context->Start();
|
| +
|
| + // When ChromotingHost is shutdown because of failure or a request that
|
| + // we made. ShutdownChromotingTask() is calls.
|
| + // ShutdownChromotingTask() will then post a task to
|
| + // |main_message_loop| to shutdown the chromoting context.
|
| + chromoting_host->Start(
|
| + NewRunnableFunction(&OnChromotingHostShutdown,
|
| + &main_message_loop, chromoting_context.get()));
|
| + }
|
| + }
|
| +#endif
|
| +
|
| MessageLoop::current()->Run();
|
| service_process.Teardown();
|
| +
|
| return 0;
|
| }
|
|
|