diff options
author | alexeypa@chromium.org <alexeypa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-01 03:56:38 +0000 |
---|---|---|
committer | alexeypa@chromium.org <alexeypa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-01 03:56:38 +0000 |
commit | b6d0cd9a7c38055a9e719e7ac3d90fc1aaa3cddb (patch) | |
tree | 362aee8f0ad4fc1bc0ec33bc2b2216de9f89fe23 /remoting | |
parent | bcc2c6dcda4c70cf546cec0b25228fa571b4924c (diff) | |
download | chromium_src-b6d0cd9a7c38055a9e719e7ac3d90fc1aaa3cddb.zip chromium_src-b6d0cd9a7c38055a9e719e7ac3d90fc1aaa3cddb.tar.gz chromium_src-b6d0cd9a7c38055a9e719e7ac3d90fc1aaa3cddb.tar.bz2 |
Refactor the ATL module code to accomodate the coming RDP changes.
Changes in this CL:
- The list of COM classes served by the process explicitly specified. This way a different set of classes can be served depending on the entry point used.
- Renamed the type library to ChromotingLib as it will contain other classes as well.
- The ATL module class runs Chromium message loop allowing tasks to be posted to it.
- The main mesage loop is wrapped into AutoThreadTaskRunner as an aid to implementing asynchronous shutdown code.
- The COM process exits as soon as the last COM object it serves released.
BUG=137696
Review URL: https://chromiumcodereview.appspot.com/12326164
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@185453 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'remoting')
-rw-r--r-- | remoting/host/installer/win/chromoting.wxs | 30 | ||||
-rw-r--r-- | remoting/host/installer/win/parameters.json | 2 | ||||
-rw-r--r-- | remoting/host/setup/daemon_controller_win.cc | 5 | ||||
-rw-r--r-- | remoting/host/win/chromoting_lib_idl.templ (renamed from remoting/host/win/elevated_controller_idl.templ) | 8 | ||||
-rw-r--r-- | remoting/host/win/chromoting_module.cc | 140 | ||||
-rw-r--r-- | remoting/host/win/chromoting_module.h | 71 | ||||
-rw-r--r-- | remoting/host/win/elevated_controller.h | 6 | ||||
-rw-r--r-- | remoting/host/win/elevated_controller_module.cc | 24 | ||||
-rw-r--r-- | remoting/remoting.gyp | 60 |
9 files changed, 264 insertions, 82 deletions
diff --git a/remoting/host/installer/win/chromoting.wxs b/remoting/host/installer/win/chromoting.wxs index 47a2189..0ef21fd 100644 --- a/remoting/host/installer/win/chromoting.wxs +++ b/remoting/host/installer/win/chromoting.wxs @@ -24,13 +24,14 @@ <?define UpgradeCode = "2b21f767-e157-4fa6-963c-55834c1433a6" ?> <?define CoreBinary = "remoting_core.dll" ?> + <?define HostBinary = "remoting_host.exe" ?> + + <?define ChromotingTypelib = "{b6396c45-b0cc-456b-9f49-f12964ee6df4}" ?> <?define ControllerAppid = "{4ff35d5e-d226-4550-9248-03e7779e67de}" ?> - <?define ControllerBinary = "remoting_host.exe" ?> <?define ControllerClass = "ElevatedController Class" ?> <?define ControllerProgid = "ChromotingElevatedController.ElevatedController" ?> - <?define ControllerTypelib = "{9d9a5a2c-576e-4acd-9c75-aabff74b205d}" ?> <!-- The long hex value below is a security descriptor that allows SYSTEM, @@ -45,6 +46,7 @@ --> <?define ControllerSd = "010004805C0000006C00000000000000140000000200480003000000000014000300000001010000000000050400000000001400030000000101000000000005120000000000180003000000010200000000000520000000200200000102000000000005200000002002000001020000000000052000000020020000" ?> + <!-- Verify that all required parameters are defined. --> <?ifndef ControllerClsid ?> <?error ControllerClsid must be defined ?> <?endif?> @@ -225,7 +227,7 @@ </Component> <?endif?> - <Component Id="remoting_controller" Guid="*"> + <Component Id="remoting_lib" Guid="*"> <RegistryKey Root="HKLM" Key="SOFTWARE\Classes"> <RegistryKey Key="AppId"> @@ -236,12 +238,6 @@ Type="binary" Value="$(var.ControllerSd)"/> </RegistryKey> - - <RegistryKey Key="$(var.ControllerBinary)" Action="create"> - <RegistryValue Type="string" - Name="AppID" - Value="$(var.ControllerAppid)"/> - </RegistryKey> </RegistryKey> <RegistryKey Key="$(var.ControllerProgid)" Action="create"> @@ -285,7 +281,7 @@ <RegistryKey Key="LocalServer32" Action="create"> <RegistryValue Type="string" - Value="[binaries]$(var.ControllerBinary) --type=controller"/> + Value="[binaries]$(var.HostBinary) --type=controller"/> </RegistryKey> <RegistryKey Key="ProgID" Action="create"> @@ -295,7 +291,7 @@ <RegistryKey Key="TypeLib" Action="create"> <RegistryValue Type="string" - Value="$(var.ControllerTypelib)"/> + Value="$(var.ChromotingTypelib)"/> </RegistryKey> <RegistryKey Key="VersionIndependentProgID" Action="create"> @@ -324,7 +320,7 @@ <RegistryKey Key="TypeLib" Action="create"> <RegistryValue Type="string" - Value="$(var.ControllerTypelib)"/> + Value="$(var.ChromotingTypelib)"/> </RegistryKey> </RegistryKey> @@ -337,14 +333,16 @@ <RegistryKey Key="TypeLib" Action="create"> <RegistryValue Type="string" - Value="$(var.ControllerTypelib)"/> + Value="$(var.ChromotingTypelib)"/> </RegistryKey> </RegistryKey> </RegistryKey> <RegistryKey Key="Typelib"> - <RegistryKey Key="$(var.ControllerTypelib)" Action="create"> - <RegistryKey Key="1.1" Action="create"> + <RegistryKey Key="$(var.ChromotingTypelib)" Action="create"> + <RegistryKey Key="1.0" Action="create"> + <RegistryValue Type="string" + Value="Chromoting 1.0 Type Library"/> <RegistryKey Key="0" Action="create"> <RegistryKey Key="win32" Action="create"> <RegistryValue Type="string" @@ -467,10 +465,10 @@ <?if $(var.OfficialBuild) != 0 ?> <ComponentRef Id="omaha_registration"/> <?endif?> - <ComponentRef Id="remoting_controller"/> <ComponentRef Id="remoting_core"/> <ComponentRef Id="remoting_desktop"/> <ComponentRef Id="remoting_host"/> + <ComponentRef Id="remoting_lib"/> <ComponentRef Id="sas"/> <ComponentRef Id="sawbuck_provider"/> </Feature> diff --git a/remoting/host/installer/win/parameters.json b/remoting/host/installer/win/parameters.json index d5c13cd..324dc7e 100644 --- a/remoting/host/installer/win/parameters.json +++ b/remoting/host/installer/win/parameters.json @@ -1,9 +1,9 @@ { "defines": { "Branding": "@@BRANDING@@", + "ControllerClsid": "@@DAEMON_CONTROLLER_CLSID@@", "OfficialBuild": "@@OFFICIAL_BUILD@@", "RemotingMultiProcess" : "@@REMOTING_MULTI_PROCESS@@", - "ControllerClsid": "@@CONTROLLER_CLSID@@", "Version": "@@VERSION@@" }, "extensions": [ diff --git a/remoting/host/setup/daemon_controller_win.cc b/remoting/host/setup/daemon_controller_win.cc index c2897d4..497fd5a 100644 --- a/remoting/host/setup/daemon_controller_win.cc +++ b/remoting/host/setup/daemon_controller_win.cc @@ -26,12 +26,11 @@ #include "base/win/windows_version.h" #include "remoting/base/scoped_sc_handle_win.h" #include "remoting/host/branding.h" +// MIDL-generated declarations and definitions. +#include "remoting/host/chromoting_lib.h" #include "remoting/host/setup/daemon_installer_win.h" #include "remoting/host/usage_stats_consent.h" -// MIDL-generated declarations and definitions. -#include "remoting/host/elevated_controller.h" - using base::win::ScopedBstr; using base::win::ScopedComPtr; diff --git a/remoting/host/win/elevated_controller_idl.templ b/remoting/host/win/chromoting_lib_idl.templ index 27b15ae..f2f7f31 100644 --- a/remoting/host/win/elevated_controller_idl.templ +++ b/remoting/host/win/chromoting_lib_idl.templ @@ -65,11 +65,11 @@ interface IDaemonControl2: IDaemonControl { }; [ - uuid(9d9a5a2c-576e-4acd-9c75-aabff74b205d), - version(1.1), - helpstring("Chromoting Elevated Controller 1.1 Type Library") + uuid(b6396c45-b0cc-456b-9f49-f12964ee6df4), + version(1.0), + helpstring("Chromoting 1.0 Type Library") ] -library ChromotingElevatedControllerLib { +library ChromotingLib { importlib("stdole2.tlb"); [ diff --git a/remoting/host/win/chromoting_module.cc b/remoting/host/win/chromoting_module.cc new file mode 100644 index 0000000..a9f62b1 --- /dev/null +++ b/remoting/host/win/chromoting_module.cc @@ -0,0 +1,140 @@ +// Copyright (c) 2013 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. + +#include "remoting/host/win/chromoting_module.h" + +#include "base/lazy_instance.h" +#include "base/logging.h" +#include "base/message_loop.h" +#include "base/run_loop.h" +#include "remoting/base/auto_thread_task_runner.h" +#include "remoting/host/host_exit_codes.h" +#include "remoting/host/win/elevated_controller.h" + +namespace remoting { + +namespace { + +// Holds a reference to the task runner used by the module. +base::LazyInstance<scoped_refptr<AutoThreadTaskRunner> > g_module_task_runner = + LAZY_INSTANCE_INITIALIZER; + +} // namespace + +ChromotingModule::ChromotingModule( + ATL::_ATL_OBJMAP_ENTRY* classes, + ATL::_ATL_OBJMAP_ENTRY* classes_end) + : classes_(classes), + classes_end_(classes_end) { + // Don't do anything if COM initialization failed. + if (!com_initializer_.succeeded()) + return; + + ATL::_AtlComModule.ExecuteObjectMain(true); +} + +ChromotingModule::~ChromotingModule() { + // Don't do anything if COM initialization failed. + if (!com_initializer_.succeeded()) + return; + + Term(); + ATL::_AtlComModule.ExecuteObjectMain(false); +} + +// static +scoped_refptr<AutoThreadTaskRunner> ChromotingModule::task_runner() { + return g_module_task_runner.Get(); +} + +bool ChromotingModule::Run() { + // Don't do anything if COM initialization failed. + if (!com_initializer_.succeeded()) + return false; + + // Register class objects. + HRESULT result = RegisterClassObjects(CLSCTX_LOCAL_SERVER, + REGCLS_MULTIPLEUSE | REGCLS_SUSPENDED); + if (FAILED(result)) { + LOG(ERROR) << "Failed to register class objects, result=0x" + << std::hex << result << std::dec << "."; + return false; + } + + // Arrange to run |message_loop| until no components depend on it. + MessageLoop message_loop(MessageLoop::TYPE_UI); + base::RunLoop run_loop; + g_module_task_runner.Get() = new AutoThreadTaskRunner( + message_loop.message_loop_proxy(), run_loop.QuitClosure()); + + // Start accepting activations. + result = CoResumeClassObjects(); + if (FAILED(result)) { + LOG(ERROR) << "CoResumeClassObjects() failed, result=0x" + << std::hex << result << std::dec << "."; + return false; + } + + // Run the loop until the module lock counter reaches zero. + run_loop.Run(); + + // Unregister class objects. + result = RevokeClassObjects(); + if (FAILED(result)) { + LOG(ERROR) << "Failed to unregister class objects, result=0x" + << std::hex << result << std::dec << "."; + return false; + } + + return true; +} + +LONG ChromotingModule::Unlock() { + LONG count = ATL::CAtlModuleT<ChromotingModule>::Unlock(); + + if (!count) { + // Stop accepting activations. + HRESULT hr = CoSuspendClassObjects(); + CHECK(SUCCEEDED(hr)); + + // Release the message loop reference, causing the message loop to exit. + g_module_task_runner.Get() = NULL; + } + + return count; +} + +HRESULT ChromotingModule::RegisterClassObjects(DWORD class_context, + DWORD flags) { + for (ATL::_ATL_OBJMAP_ENTRY* i = classes_; i != classes_end_; ++i) { + HRESULT result = i->RegisterClassObject(class_context, flags); + if (FAILED(result)) + return result; + } + + return S_OK; +} + +HRESULT ChromotingModule::RevokeClassObjects() { + for (ATL::_ATL_OBJMAP_ENTRY* i = classes_; i != classes_end_; ++i) { + HRESULT result = i->RevokeClassObject(); + if (FAILED(result)) + return result; + } + + return S_OK; +} + +// Elevated controller entry point. +int ElevatedControllerMain() { + ATL::_ATL_OBJMAP_ENTRY elevated_controller_entry[] = { + OBJECT_ENTRY(__uuidof(ElevatedController), ElevatedController) + }; + + ChromotingModule module(elevated_controller_entry, + elevated_controller_entry + 1); + return module.Run() ? kSuccessExitCode : kInitializationFailed; +} + +} // namespace remoting diff --git a/remoting/host/win/chromoting_module.h b/remoting/host/win/chromoting_module.h new file mode 100644 index 0000000..4a1bd2be --- /dev/null +++ b/remoting/host/win/chromoting_module.h @@ -0,0 +1,71 @@ +// Copyright (c) 2013 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 REMOTING_HOST_WIN_CHROMOTING_MODULE_H_ +#define REMOTING_HOST_WIN_CHROMOTING_MODULE_H_ + +#include <atlbase.h> +#include <atlcom.h> +#include <atlctl.h> + +#include "base/basictypes.h" +#include "base/memory/ref_counted.h" +#include "base/win/scoped_com_initializer.h" + +// MIDL-generated declarations. +#include "remoting/host/chromoting_lib.h" + +namespace base { +namespace win { +class ScopedCOMInitializer; +} // namespace win +} // namespace base + +namespace remoting { + +class AutoThreadTaskRunner; + +// A custom version of |CAtlModuleT<>| that registers only those classes which +// registration entries are passed to the constructor. |ChromotingModule| runs +// |MessageLoop| allowing Chromium code to post tasks to it. Unlike +// |CAtlExeModuleT<>|, |ChromotingModule| shuts itself down immediately once +// the last COM object is released. +class ChromotingModule : public ATL::CAtlModuleT<ChromotingModule> { + public: + // Initializes the module. |classes| and |classes_end| must outlive |this|. + ChromotingModule(ATL::_ATL_OBJMAP_ENTRY* classes, + ATL::_ATL_OBJMAP_ENTRY* classes_end); + virtual ~ChromotingModule(); + + // Returns the task runner used by the module. Returns NULL if the task runner + // hasn't been registered yet or if the server is shutting down. + static scoped_refptr<AutoThreadTaskRunner> task_runner(); + + // Registers COM classes and runs the main message loop until there are + // components using it. + bool Run(); + + // ATL::CAtlModuleT<> overrides + virtual LONG Unlock() OVERRIDE; + + DECLARE_LIBID(LIBID_ChromotingLib) + + private: + // Registers/unregisters class objects from |classes_| - |classes_end_|. + HRESULT RegisterClassObjects(DWORD class_context, DWORD flags); + HRESULT RevokeClassObjects(); + + // Used to initialize COM library. + base::win::ScopedCOMInitializer com_initializer_; + + // Point to the vector of classes registered by this module. + ATL::_ATL_OBJMAP_ENTRY* classes_; + ATL::_ATL_OBJMAP_ENTRY* classes_end_; + + DISALLOW_COPY_AND_ASSIGN(ChromotingModule); +}; + +} // namespace remoting + +#endif // REMOTING_HOST_WIN_CHROMOTING_MODULE_H_ diff --git a/remoting/host/win/elevated_controller.h b/remoting/host/win/elevated_controller.h index 52beb80..3901bc1 100644 --- a/remoting/host/win/elevated_controller.h +++ b/remoting/host/win/elevated_controller.h @@ -12,7 +12,7 @@ #include "remoting/base/scoped_sc_handle_win.h" // MIDL-generated declarations. -#include "remoting/host/elevated_controller.h" +#include "remoting/host/chromoting_lib.h" namespace remoting { @@ -21,7 +21,7 @@ class ATL_NO_VTABLE __declspec(uuid(DAEMON_CONTROLLER_CLSID)) ElevatedController public ATL::CComCoClass<ElevatedController, &__uuidof(ElevatedController)>, public ATL::IDispatchImpl<IDaemonControl2, &IID_IDaemonControl2, - &LIBID_ChromotingElevatedControllerLib, 1, 1> { + &LIBID_ChromotingLib, 1, 0> { public: // Declare the class factory that does not lock the ATL module. This is the // same DECLARE_CLASSFACTORY() with the exception that ATL::CComObjectNoLock @@ -69,8 +69,6 @@ class ATL_NO_VTABLE __declspec(uuid(DAEMON_CONTROLLER_CLSID)) ElevatedController DECLARE_PROTECT_FINAL_CONSTRUCT() }; -OBJECT_ENTRY_AUTO(__uuidof(ElevatedController), ElevatedController) - } // namespace remoting #endif // REMOTING_HOST_WIN_ELEVATED_CONTROLLER_H_ diff --git a/remoting/host/win/elevated_controller_module.cc b/remoting/host/win/elevated_controller_module.cc deleted file mode 100644 index a230e51..0000000 --- a/remoting/host/win/elevated_controller_module.cc +++ /dev/null @@ -1,24 +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. - -#include <atlbase.h> -#include <atlcom.h> -#include <atlctl.h> - -#include "remoting/host/win/elevated_controller.h" - -namespace remoting { - -class ElevatedControllerModule - : public ATL::CAtlExeModuleT<ElevatedControllerModule> { - public: - DECLARE_LIBID(LIBID_ChromotingElevatedControllerLib) -}; - -int ElevatedControllerMain() { - ElevatedControllerModule module; - return module.WinMain(SW_HIDE); -} - -} // namespace remoting diff --git a/remoting/remoting.gyp b/remoting/remoting.gyp index 4162bcf..7a73e44 100644 --- a/remoting/remoting.gyp +++ b/remoting/remoting.gyp @@ -89,9 +89,9 @@ 'host_plugin_prefix': '', }], ['OS=="win"', { - # Use auto-generated CLSID for the daemon controller to make sure that - # the newly installed version of the controller will be used during - # upgrade even if there is an old instance running already. + # Use auto-generated CLSID to make sure that the newly installed COM + # classes will be used during/after upgrade even if there are old + # instances running already. 'daemon_controller_clsid': '<!(python tools/uuidgen.py)', }], ], @@ -590,7 +590,7 @@ ['OS=="win"', { 'dependencies': [ '../google_update/google_update.gyp:google_update', - 'remoting_controller_idl', + 'remoting_lib_idl', ], # TODO(jschuh): crbug.com/167187 fix size_t to int truncations. 'msvs_disabled_warnings': [4267, ], @@ -664,7 +664,7 @@ 'ISOLATION_AWARE_ENABLED=1', ], 'dependencies': [ - 'remoting_controller_idl', + 'remoting_lib_idl', 'remoting_version_resources', ], 'include_dirs': [ @@ -1125,16 +1125,16 @@ ], }, # end of target 'remoting_breakpad_tester' { - 'target_name': 'remoting_controller_idl', + 'target_name': 'remoting_lib_idl', 'type': 'static_library', 'sources': [ - 'host/win/elevated_controller_idl.templ', - '<(SHARED_INTERMEDIATE_DIR)/remoting/host/elevated_controller.h', - '<(SHARED_INTERMEDIATE_DIR)/remoting/host/elevated_controller.idl', - '<(SHARED_INTERMEDIATE_DIR)/remoting/host/elevated_controller_i.c', + 'host/win/chromoting_lib_idl.templ', + '<(SHARED_INTERMEDIATE_DIR)/remoting/host/chromoting_lib.h', + '<(SHARED_INTERMEDIATE_DIR)/remoting/host/chromoting_lib.idl', + '<(SHARED_INTERMEDIATE_DIR)/remoting/host/chromoting_lib_i.c', ], # This target exports a hard dependency because dependent targets may - # include elevated_controller.h, a generated header. + # include chromoting_lib.h, a generated header. 'hard_dependency': 1, 'msvs_settings': { 'VCMIDLTool': { @@ -1151,7 +1151,7 @@ 'rule_name': 'generate_idl', 'extension': 'templ', 'outputs': [ - '<(SHARED_INTERMEDIATE_DIR)/remoting/host/elevated_controller.idl', + '<(SHARED_INTERMEDIATE_DIR)/remoting/host/chromoting_lib.idl', ], 'action': [ 'python', @@ -1165,19 +1165,19 @@ 'msvs_cygwin_shell': 0, }, ], - }, # end of target 'remoting_controller_idl' + }, # end of target 'remoting_lib_idl' - # Regenerates 'elevated_controller.rc' (used to embed - # 'elevated_controller.tlb' into remoting_core.dll's resources) every - # time 'elevated_controller_idl.templ' changes. Making remoting_core - # depend on both this and 'remoting_controller_idl' targets ensures that - # the resorces are rebuilt every time the type library is updated. GYP - # alone is not smart enough to figure out this dependency on its own. + # Regenerates 'chromoting_lib.rc' (used to embed 'chromoting_lib.tlb' + # into remoting_core.dll's resources) every time + # 'chromoting_lib_idl.templ' changes. Making remoting_core depend on + # both this and 'remoting_lib_idl' targets ensures that the resorces + # are rebuilt every time the type library is updated. GYP alone is + # not smart enough to figure out this dependency on its own. { - 'target_name': 'remoting_controller_rc', + 'target_name': 'remoting_lib_rc', 'type': 'none', 'sources': [ - 'host/win/elevated_controller_idl.templ', + 'host/win/chromoting_lib_idl.templ', ], 'hard_dependency': 1, 'direct_dependent_settings': { @@ -1190,16 +1190,16 @@ 'rule_name': 'generate_rc', 'extension': 'templ', 'outputs': [ - '<(SHARED_INTERMEDIATE_DIR)/remoting/host/elevated_controller.rc', + '<(SHARED_INTERMEDIATE_DIR)/remoting/host/chromoting_lib.rc', ], 'action': [ - 'echo 1 typelib "remoting/host/elevated_controller.tlb" > <@(_outputs)', + 'echo 1 typelib "remoting/host/chromoting_lib.tlb" > <@(_outputs)', ], 'message': 'Generating <@(_outputs)', 'msvs_cygwin_shell': 0, }, ], - }, # end of target 'remoting_controller_rc' + }, # end of target 'remoting_lib_rc' { 'target_name': 'remoting_configurer', 'type': 'executable', @@ -1318,20 +1318,19 @@ '../net/net.gyp:net', 'remoting_base', 'remoting_breakpad', - 'remoting_controller_idl', - 'remoting_controller_rc', 'remoting_host', 'remoting_host_event_logger', 'remoting_host_logging', + 'remoting_lib_idl', + 'remoting_lib_rc', 'remoting_me2me_host_static', 'remoting_protocol', 'remoting_version_resources', ], 'sources': [ - '<(SHARED_INTERMEDIATE_DIR)/remoting/host/elevated_controller.rc', + '<(SHARED_INTERMEDIATE_DIR)/remoting/host/chromoting_lib.rc', '<(SHARED_INTERMEDIATE_DIR)/remoting/host/remoting_host_messages.rc', '<(SHARED_INTERMEDIATE_DIR)/remoting/remoting_core_version.rc', - 'base/scoped_sc_handle_win.h', 'host/chromoting_messages.cc', 'host/chromoting_messages.h', 'host/config_file_watcher.cc', @@ -1361,12 +1360,13 @@ 'host/sas_injector_win.cc', 'host/verify_config_window_win.cc', 'host/verify_config_window_win.h', + 'host/win/chromoting_module.cc', + 'host/win/chromoting_module.h', 'host/win/core.cc', 'host/win/core.rc', 'host/win/core_resource.h', 'host/win/elevated_controller.cc', 'host/win/elevated_controller.h', - 'host/win/elevated_controller_module.cc', 'host/win/host_service.cc', 'host/win/host_service.h', 'host/win/omaha.cc', @@ -1722,7 +1722,7 @@ ], 'defs': [ 'BRANDING=<(branding)', - 'CONTROLLER_CLSID={<(daemon_controller_clsid)}', + 'DAEMON_CONTROLLER_CLSID={<(daemon_controller_clsid)}', 'REMOTING_MULTI_PROCESS=<(remoting_multi_process)', 'VERSION=<(version_full)', ], |