15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <atlbase.h>
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <atlwin.h>
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <ole2.h>
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/at_exit.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/run_loop.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/threading/thread.h"
137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "remoting/base/url_request_context.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "remoting/host/setup/win/host_configurer_window.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class HostConfigurerModule
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : public ATL::CAtlExeModuleT<HostConfigurerModule> {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HostConfigurerModule _AtlModule;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// An app that runs a HostConfigurerWindow.
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int WINAPI WinMain(HINSTANCE instance_handle, HINSTANCE prev_instance_handle,
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   LPSTR cmd_line, int cmd)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // google_apis::GetOAuth2ClientID/Secret need the next line.
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // On Windows, CommandLine::Init ignores its arguments, and parses
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // GetCommandLineW directly, so we can pass it dummy arguments.
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CommandLine::Init(0, NULL);
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Register and initialize common controls.
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  INITCOMMONCONTROLSEX info;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  info.dwSize = sizeof(info);
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  info.dwICC = ICC_STANDARD_CLASSES;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  InitCommonControlsEx(&info);
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This object instance is required by Chrome code (for example,
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // FilePath, LazyInstance, MessageLoop).
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::AtExitManager exit_manager;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Provide message loops and threads for the URLRequestContextGetter.
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::MessageLoop message_loop(base::MessageLoop::TYPE_UI);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Thread io_thread("IO thread");
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::Thread::Options io_thread_options(base::MessageLoop::TYPE_IO, 0);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  io_thread.StartWithOptions(io_thread_options);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_(
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new remoting::URLRequestContextGetter(
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          message_loop.message_loop_proxy(), io_thread.message_loop_proxy()));
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OleInitialize(NULL);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Run a HostConfigurerWindow.
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  remoting::HostConfigurerWindow host_configurer_window(
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      url_request_context_getter_, message_loop.message_loop_proxy(),
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      message_loop.QuitClosure());
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  host_configurer_window.Create(NULL);
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::RunLoop run_loop;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run_loop.Run();
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  io_thread.Stop();
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OleUninitialize();
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
66