Index: plugins/update/activex/update3web_control.cc |
diff --git a/plugins/update/activex/update3web_control.cc b/plugins/update/activex/update3web_control.cc |
deleted file mode 100644 |
index 6d49ff300a7a7a48ff2888a0c0d5b5784a35ab4d..0000000000000000000000000000000000000000 |
--- a/plugins/update/activex/update3web_control.cc |
+++ /dev/null |
@@ -1,366 +0,0 @@ |
-// Copyright 2009 Google Inc. |
-// |
-// Licensed under the Apache License, Version 2.0 (the "License"); |
-// you may not use this file except in compliance with the License. |
-// You may obtain a copy of the License at |
-// |
-// http://www.apache.org/licenses/LICENSE-2.0 |
-// |
-// Unless required by applicable law or agreed to in writing, software |
-// distributed under the License is distributed on an "AS IS" BASIS, |
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
-// See the License for the specific language governing permissions and |
-// limitations under the License. |
-// ======================================================================== |
- |
-#include "omaha/plugins/update/activex/update3web_control.h" |
-#include <objbase.h> |
-#include <objidl.h> |
-#include "omaha/base/error.h" |
-#include "omaha/base/system.h" |
-#include "omaha/base/utils.h" |
-#include "omaha/base/vistautil.h" |
-#include "omaha/common/command_line.h" |
-#include "omaha/common/command_line_builder.h" |
-#include "omaha/common/const_cmd_line.h" |
-#include "omaha/common/goopdate_utils.h" |
-#include "omaha/common/webplugin_utils.h" |
-#include "omaha/goopdate/app_manager.h" |
-#include "goopdate/omaha3_idl.h" |
- |
-namespace omaha { |
- |
-Update3WebControl::Update3WebControl() { |
-} |
- |
-// There is a code generation bug in VC8. If a base class with template |
-// arguments and virtual members is not the first base class with virtual |
-// methods, the generated code for calling a virtual method on that base class |
-// will adjust the this pointer one extra time. This results in all sorts of |
-// strange things happening; typically, the program will crash at a later point. |
-// To avoid this, all calls to base class methods that have template arguments |
-// should have all the template arguments specified, since this seems to prevent |
-// the code generation bug from occuring. |
- |
-STDMETHODIMP Update3WebControl::createOmahaMachineServerAsync( |
- VARIANT_BOOL create_elevated, IDispatch** async_status) { |
- ASSERT1(async_status); |
- |
- CString url; |
- HRESULT hr = SiteLock::GetCurrentBrowserUrl(this, &url); |
- if (FAILED(hr)) { |
- CORE_LOG(LE, (L"[GetCurrentBrowserUrl failed][0x%08x]", hr)); |
- return hr; |
- } |
- |
- if (!site_lock_.InApprovedDomain(url)) { |
- return GOOPDATE_E_ONECLICK_HOSTCHECK_FAILED; |
- } |
- |
- if (!async_status) { |
- return E_POINTER; |
- } |
- |
- CComPtr<ICoCreateAsync> cocreate_async; |
- hr = cocreate_async.CoCreateInstance(__uuidof(CoCreateAsyncClass)); |
- if (FAILED(hr)) { |
- CORE_LOG(LE, (L"[CoCreate CoCreateAsyncClass failed][0x%08x]", hr)); |
- return hr; |
- } |
- |
- CComPtr<ICoCreateAsyncStatus> status; |
- hr = cocreate_async->createOmahaMachineServerAsync(CComBSTR(url), |
- create_elevated, |
- &status); |
- if (FAILED(hr)) { |
- CORE_LOG(LE, (L"[CreateInstanceAsync failed][0x%08x]", hr)); |
- return hr; |
- } |
- |
- hr = status->QueryInterface(async_status); |
- CORE_LOG(L3, (L"[createOmahaMachineServerAsync][0x%p][0x%08x]", this, hr)); |
- return hr; |
-} |
- |
-STDMETHODIMP Update3WebControl::createOmahaUserServer(IDispatch** server) { |
- ASSERT1(server); |
- |
- CString url; |
- HRESULT hr = SiteLock::GetCurrentBrowserUrl(this, &url); |
- if (FAILED(hr)) { |
- CORE_LOG(LE, (L"[GetCurrentBrowserUrl failed][0x%08x]", hr)); |
- return hr; |
- } |
- |
- if (!site_lock_.InApprovedDomain(url)) { |
- return GOOPDATE_E_ONECLICK_HOSTCHECK_FAILED; |
- } |
- |
- if (!server) { |
- return E_POINTER; |
- } |
- |
- CComPtr<IGoogleUpdate3WebSecurity> security; |
- hr = security.CoCreateInstance(__uuidof(GoogleUpdate3WebUserClass)); |
- if (FAILED(hr)) { |
- CORE_LOG(LE, (_T("[CoCreate failed][0x%08x]"), hr)); |
- return hr; |
- } |
- |
- hr = security->setOriginURL(CComBSTR(url)); |
- if (FAILED(hr)) { |
- CORE_LOG(LE, (_T("[setOriginURL failed][0x%08x]"), hr)); |
- return hr; |
- } |
- |
- hr = security->QueryInterface(server); |
- if (FAILED(hr)) { |
- CORE_LOG(LE, (_T("[QueryInterface failed][0x%08x]"), hr)); |
- return hr; |
- } |
- |
- CORE_LOG(L3, (L"[createOmahaUserServer][0x%p][0x%p]", this, *server)); |
- return hr; |
-} |
- |
-STDMETHODIMP Update3WebControl::getInstalledVersion(BSTR guid_string, |
- VARIANT_BOOL is_machine, |
- BSTR* version_string) { |
- if (!site_lock_.InApprovedDomain(this)) { |
- return GOOPDATE_E_ONECLICK_HOSTCHECK_FAILED; |
- } |
- |
- if (!guid_string || !version_string) { |
- return E_POINTER; |
- } |
- *version_string = NULL; |
- |
- CORE_LOG(L2, (_T("[Update3WebControl::getInstalledVersion][%s][%d]"), |
- guid_string, is_machine)); |
- |
- CString version; |
- HRESULT hr = GetVersionUsingCOMServer(guid_string, is_machine == VARIANT_TRUE, |
- &version); |
- if (FAILED(hr)) { |
- hr = GetVersionUsingRegistry(guid_string, is_machine == VARIANT_TRUE, |
- &version); |
- } |
- |
- if (SUCCEEDED(hr)) { |
- *version_string = version.AllocSysString(); |
- } |
- |
- return S_OK; |
-} |
- |
-HRESULT Update3WebControl::GetVersionUsingCOMServer(const TCHAR* guid_string, |
- bool is_machine, |
- CString* version_string) { |
- CORE_LOG(L2, (_T("[GoopdateCtrl::GetVersionUsingCOMServer][%s][%d]"), |
- guid_string, is_machine)); |
- ASSERT1(guid_string); |
- ASSERT1(version_string); |
- |
- CComPtr<IGoogleUpdate3Web> update3web; |
- HRESULT hr = update3web.CoCreateInstance( |
- is_machine ? __uuidof(GoogleUpdate3WebMachineClass) : |
- __uuidof(GoogleUpdate3WebUserClass)); |
- if (FAILED(hr)) { |
- CORE_LOG(LE, (_T("[update3web.CoCreateInstance failed][0x%x]"), hr)); |
- return hr; |
- } |
- |
- CComPtr<IDispatch> app_bundle_dispatch; |
- hr = update3web->createAppBundleWeb(&app_bundle_dispatch); |
- if (FAILED(hr)) { |
- CORE_LOG(LE, (_T("[update3web.createAppBundleWeb failed][0x%x]"), hr)); |
- return hr; |
- } |
- |
- CComPtr<IAppBundleWeb> app_bundle_web; |
- hr = app_bundle_dispatch->QueryInterface(&app_bundle_web); |
- if (FAILED(hr)) { |
- CORE_LOG(LE, (_T("[QueryInterface for IAppBundleWeb failed][0x%x]"), hr)); |
- return hr; |
- } |
- |
- hr = app_bundle_web->initialize(); |
- if (FAILED(hr)) { |
- CORE_LOG(LE, (_T("[initialize fail][0x%x]"), hr)); |
- return hr; |
- } |
- |
- hr = app_bundle_web->createInstalledApp(CComBSTR(guid_string)); |
- if (FAILED(hr)) { |
- CORE_LOG(LE, (_T("[createInstalledApp fail][%s][0x%x]"), guid_string, hr)); |
- return hr; |
- } |
- |
- CComPtr<IDispatch> app_dispatch; |
- hr = app_bundle_web->get_appWeb(0, &app_dispatch); |
- if (FAILED(hr)) { |
- CORE_LOG(LE, (_T("[get_appWeb failed][0x%x]"), hr)); |
- return hr; |
- } |
- |
- CComPtr<IAppWeb> app_web; |
- hr = app_dispatch->QueryInterface(&app_web); |
- if (FAILED(hr)) { |
- CORE_LOG(LE, (_T("[QueryInterface for IAppWeb failed][0x%x]"), hr)); |
- return hr; |
- } |
- |
- CComPtr<IDispatch> app_version_dispatch; |
- hr = app_web->get_currentVersionWeb(&app_version_dispatch); |
- if (FAILED(hr)) { |
- CORE_LOG(LE, (_T("[get_currentVersionWeb failed][0x%x]"), hr)); |
- return hr; |
- } |
- |
- CComPtr<IAppVersionWeb> app_version_web; |
- hr = app_version_dispatch->QueryInterface(&app_version_web); |
- if (FAILED(hr)) { |
- CORE_LOG(LE, (_T("[QueryInterface for IAppVersionWeb failed][0x%x]"), hr)); |
- return hr; |
- } |
- |
- CComBSTR version; |
- hr = app_version_web->get_version(&version); |
- if (FAILED(hr)) { |
- CORE_LOG(LE, (_T("[get_version failed][0x%x]"), hr)); |
- return hr; |
- } |
- |
- *version_string = version; |
- CORE_LOG(L2, (_T("[Update3WebControl::GetVersionUsingCOMServer][%s][%d][%s]"), |
- guid_string, is_machine, *version_string)); |
- return S_OK; |
-} |
- |
-HRESULT Update3WebControl::GetVersionUsingRegistry(const TCHAR* guid_string, |
- bool is_machine, |
- CString* version_string) { |
- CORE_LOG(L2, (_T("[GoopdateCtrl::GetVersionUsingRegistry][%s][%d]"), |
- guid_string, is_machine)); |
- ASSERT1(guid_string); |
- ASSERT1(version_string); |
- |
- GUID app_guid = GUID_NULL; |
- HRESULT hr = StringToGuidSafe(guid_string, &app_guid); |
- if (FAILED(hr)) { |
- return hr; |
- } |
- |
- return AppManager::ReadAppVersionNoLock(is_machine, app_guid, version_string); |
-} |
- |
-HRESULT Update3WebControl::crossInstall(BSTR extra_args) { |
- ASSERT1(extra_args); |
- |
- if (!site_lock_.InApprovedDomain(this)) { |
- return GOOPDATE_E_ONECLICK_HOSTCHECK_FAILED; |
- } |
- |
- if (!extra_args || !extra_args[0]) { |
- return E_INVALIDARG; |
- } |
- |
- CORE_LOG(L2, (_T("[Update3WebControl::crossInstall][%s]"), extra_args)); |
- |
- // Build the full command line as it should eventually be run. (This command |
- // line will be escaped, including the /install, and stowed in a /pi later.) |
- |
- CommandLineBuilder inner_builder(COMMANDLINE_MODE_INSTALL); |
- inner_builder.set_extra_args(CString(extra_args)); |
- CString inner_cmd_line_args = inner_builder.GetCommandLineArgs(); |
- |
- HRESULT hr = webplugin_utils::IsLanguageSupported(inner_cmd_line_args); |
- if (FAILED(hr)) { |
- CORE_LOG(LE, (_T("[IsLanguageSupported failed][0x%08x]"), hr)); |
- return hr; |
- } |
- |
- CString browser_url; |
- hr = site_lock_.GetCurrentBrowserUrl(this, &browser_url); |
- if (FAILED(hr)) { |
- return hr; |
- } |
- |
- CString url_domain; |
- hr = SiteLock::GetUrlDomain(browser_url, &url_domain); |
- if (FAILED(hr)) { |
- return hr; |
- } |
- |
- // Build the outer command line using /pi. |
- |
- CString url_domain_encoded; |
- CString cmd_line_encoded; |
- hr = StringEscape(url_domain, false, &url_domain_encoded); |
- if (FAILED(hr)) { |
- return hr; |
- } |
- |
- hr = StringEscape(inner_cmd_line_args, false, &cmd_line_encoded); |
- if (FAILED(hr)) { |
- return hr; |
- } |
- |
- CommandLineBuilder outer_builder(COMMANDLINE_MODE_WEBPLUGIN); |
- outer_builder.set_webplugin_url_domain(url_domain_encoded); |
- outer_builder.set_webplugin_args(cmd_line_encoded); |
- outer_builder.set_install_source(kCmdLineInstallSource_Update3Web); |
- CString final_cmd_line_args = outer_builder.GetCommandLineArgs(); |
- |
- CORE_LOG(L2, (_T("[Update3WebControl::crossInstall]") |
- _T("[Final command line params: %s]"), |
- final_cmd_line_args)); |
- |
- // Spawn a gu process. |
- |
- scoped_process process_goopdate; |
- |
- hr = goopdate_utils::StartGoogleUpdateWithArgs(is_machine(), |
- final_cmd_line_args, |
- address(process_goopdate)); |
- if (FAILED(hr)) { |
- CORE_LOG(LE, (_T("[Update3WebControl::crossInstall]") |
- _T("[Failed StartGoogleUpdateWithArgs][0x%x]"), hr)); |
- return hr; |
- } |
- |
- return S_OK; |
-} |
- |
-HRESULT Update3WebControl::launchAppCommand(BSTR guid_string, |
- VARIANT_BOOL is_machine, |
- BSTR cmd_id) { |
- if (!site_lock_.InApprovedDomain(this)) { |
- return GOOPDATE_E_ONECLICK_HOSTCHECK_FAILED; |
- } |
- |
- CORE_LOG(L2, (_T("[Update3WebControl::launchAppCommand]"))); |
- |
- CComPtr<IOneClickProcessLauncher> process_launcher; |
- HRESULT hr = E_UNEXPECTED; |
- |
- hr = process_launcher.CoCreateInstance( |
- is_machine ? |
- CLSID_OneClickMachineProcessLauncherClass : |
- CLSID_OneClickUserProcessLauncherClass); |
- |
- if (FAILED(hr)) { |
- CORE_LOG(LE, (_T("[Update3WebControl::launchAppCommand]") |
- _T("[Failed to CoCreate OneClickMachine/User ") |
- _T("ProcessLauncher implementation: 0x%x"), |
- hr)); |
- return hr; |
- } |
- |
- return process_launcher->LaunchAppCommand(guid_string, cmd_id); |
-} |
- |
-Update3WebControl::~Update3WebControl() { |
-} |
- |
-} // namespace omaha |