| Index: win8/delegate_execute/command_execute_impl.h
|
| diff --git a/win8/delegate_execute/command_execute_impl.h b/win8/delegate_execute/command_execute_impl.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..5a1a95c7bffb44d0c71837a1741c6e75d7d00173
|
| --- /dev/null
|
| +++ b/win8/delegate_execute/command_execute_impl.h
|
| @@ -0,0 +1,105 @@
|
| +// 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 <ShObjIdl.h>
|
| +#include <WinInet.h>
|
| +
|
| +#include <string>
|
| +
|
| +#include "base/file_path.h"
|
| +#include "base/process_util.h"
|
| +#include "win8/delegate_execute/resource.h" // main symbols
|
| +
|
| +using namespace ATL;
|
| +
|
| +EXTERN_C const GUID CLSID_CommandExecuteImpl;
|
| +
|
| +// CommandExecuteImpl
|
| +// This class implements the IExecuteCommand and related interfaces for
|
| +// handling ShellExecute launches of the Chrome browser, i.e. whether to
|
| +// launch Chrome in metro mode or desktop mode.
|
| +#if defined(GOOGLE_CHROME_BUILD)
|
| +class ATL_NO_VTABLE DECLSPEC_UUID("5C65F4B0-3651-4514-B207-D10CB699B14B")
|
| + CommandExecuteImpl
|
| +#else // GOOGLE_CHROME_BUILD
|
| +class ATL_NO_VTABLE DECLSPEC_UUID("A2DF06F9-A21A-44A8-8A99-8B9C84F29160")
|
| + CommandExecuteImpl
|
| +#endif // GOOGLE_CHROME_BUILD
|
| + : public CComObjectRootEx<CComSingleThreadModel>,
|
| + public CComCoClass<CommandExecuteImpl, &CLSID_CommandExecuteImpl>,
|
| + public IExecuteCommand,
|
| + public IObjectWithSiteImpl<CommandExecuteImpl>,
|
| + public IInitializeCommand,
|
| + public IObjectWithSelection,
|
| + public IExecuteCommandApplicationHostEnvironment,
|
| + public IForegroundTransfer {
|
| + public:
|
| + CommandExecuteImpl();
|
| +
|
| + DECLARE_REGISTRY_RESOURCEID(IDR_COMMANDEXECUTEIMPL)
|
| +
|
| + BEGIN_COM_MAP(CommandExecuteImpl)
|
| + COM_INTERFACE_ENTRY(IExecuteCommand)
|
| + COM_INTERFACE_ENTRY(IObjectWithSite)
|
| + COM_INTERFACE_ENTRY(IInitializeCommand)
|
| + COM_INTERFACE_ENTRY(IObjectWithSelection)
|
| + COM_INTERFACE_ENTRY(IExecuteCommandApplicationHostEnvironment)
|
| + COM_INTERFACE_ENTRY(IForegroundTransfer)
|
| + END_COM_MAP()
|
| +
|
| + DECLARE_PROTECT_FINAL_CONSTRUCT()
|
| +
|
| + HRESULT FinalConstruct() {
|
| + return S_OK;
|
| + }
|
| +
|
| + void FinalRelease() {
|
| + }
|
| +
|
| + public:
|
| + // IExecuteCommand
|
| + STDMETHOD(SetKeyState)(DWORD key_state);
|
| + STDMETHOD(SetParameters)(LPCWSTR params);
|
| + STDMETHOD(SetPosition)(POINT pt);
|
| + STDMETHOD(SetShowWindow)(int show);
|
| + STDMETHOD(SetNoShowUI)(BOOL no_show_ui);
|
| + STDMETHOD(SetDirectory)(LPCWSTR directory);
|
| + STDMETHOD(Execute)(void);
|
| +
|
| + // IInitializeCommand
|
| + STDMETHOD(Initialize)(LPCWSTR name, IPropertyBag* bag);
|
| +
|
| + // IObjectWithSelection
|
| + STDMETHOD(SetSelection)(IShellItemArray* item_array);
|
| + STDMETHOD(GetSelection)(REFIID riid, void** selection);
|
| +
|
| + // IExecuteCommandApplicationHostEnvironment
|
| + STDMETHOD(GetValue)(enum AHE_TYPE* pahe);
|
| +
|
| + // IForegroundTransfer
|
| + STDMETHOD(AllowForegroundTransfer)(void* reserved);
|
| +
|
| + private:
|
| + static bool FindChromeExe(FilePath* chrome_exe);
|
| + bool GetLaunchScheme(string16* display_name, INTERNET_SCHEME* scheme);
|
| + HRESULT LaunchDesktopChrome();
|
| + // Returns the launch mode, i.e. desktop launch/metro launch, etc.
|
| + EC_HOST_UI_MODE GetLaunchMode();
|
| +
|
| + CComPtr<IShellItemArray> item_array_;
|
| + string16 parameters_;
|
| + FilePath chrome_exe_;
|
| + STARTUPINFO start_info_;
|
| + string16 verb_;
|
| + string16 display_name_;
|
| + INTERNET_SCHEME launch_scheme_;
|
| +
|
| + base::IntegrityLevel integrity_level_;
|
| + EC_HOST_UI_MODE chrome_mode_;
|
| +};
|
| +
|
| +OBJECT_ENTRY_AUTO(__uuidof(CommandExecuteImpl), CommandExecuteImpl)
|
|
|