| Index: plugins/update/activex/oneclick_control.cc
|
| diff --git a/plugins/update/activex/oneclick_control.cc b/plugins/update/activex/oneclick_control.cc
|
| deleted file mode 100644
|
| index 6729e86f1ef5977bd1afe2307079a481cd8a94c8..0000000000000000000000000000000000000000
|
| --- a/plugins/update/activex/oneclick_control.cc
|
| +++ /dev/null
|
| @@ -1,335 +0,0 @@
|
| -// Copyright 2008-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.
|
| -// ========================================================================
|
| -//
|
| -// Implementation of the OneClick Plugin.
|
| -
|
| -#include "omaha/plugins/update/activex/oneclick_control.h"
|
| -
|
| -#include <dispex.h>
|
| -#include <atlsafe.h>
|
| -#include <atlbase.h>
|
| -#include <atlcom.h>
|
| -
|
| -#include "omaha/base/error.h"
|
| -#include "omaha/base/exception_barrier.h"
|
| -#include "omaha/base/file.h"
|
| -#include "omaha/base/scoped_any.h"
|
| -#include "omaha/base/scoped_ptr_address.h"
|
| -#include "omaha/base/string.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_command.h"
|
| -#include "omaha/goopdate/app_manager.h"
|
| -#include "goopdate/omaha3_idl.h"
|
| -
|
| -namespace omaha {
|
| -
|
| -OneClickControl::OneClickControl() {
|
| - CORE_LOG(L2, (_T("[OneClickControl::OneClickControl]")));
|
| -}
|
| -
|
| -OneClickControl::~OneClickControl() {
|
| - CORE_LOG(L2, (_T("[OneClickControl::~OneClickControl]")));
|
| -}
|
| -
|
| -STDMETHODIMP OneClickControl::Install(BSTR cmd_line_args,
|
| - VARIANT* success_callback,
|
| - VARIANT* failure_callback) {
|
| - ASSERT1(cmd_line_args && cmd_line_args[0]);
|
| - ASSERT1(VariantIsValidCallback(success_callback));
|
| - ASSERT1(VariantIsValidCallback(failure_callback));
|
| -
|
| - if (!site_lock_.InApprovedDomain(this)) {
|
| - return GOOPDATE_E_ONECLICK_HOSTCHECK_FAILED;
|
| - }
|
| -
|
| - if (!cmd_line_args ||
|
| - !cmd_line_args[0] ||
|
| - !VariantIsValidCallback(success_callback) ||
|
| - !VariantIsValidCallback(failure_callback) ) {
|
| - return E_INVALIDARG;
|
| - }
|
| -
|
| - CORE_LOG(L2, (_T("[OneClickControl::Install][cmd_line \"%s\"]"),
|
| - CW2CT(cmd_line_args)));
|
| -
|
| - HRESULT hr = DoInstall(CString(cmd_line_args));
|
| - if (SUCCEEDED(hr)) {
|
| - InvokeJavascriptCallback(success_callback, NULL);
|
| - } else {
|
| - CORE_LOG(LE, (_T("[DoOneClickInstallInternal failed][0x%08x]"), hr));
|
| - InvokeJavascriptCallback(failure_callback, &hr);
|
| - }
|
| -
|
| - // Return success in all cases. The failure callback has already been called
|
| - // above, and we don't want to cause a failure path to be called again when
|
| - // the JavaScript catches the exception.
|
| -
|
| - return S_OK;
|
| -}
|
| -
|
| -STDMETHODIMP OneClickControl::Install2(BSTR extra_args) {
|
| - ASSERT1(extra_args && extra_args[0]);
|
| -
|
| - if (!site_lock_.InApprovedDomain(this)) {
|
| - return GOOPDATE_E_ONECLICK_HOSTCHECK_FAILED;
|
| - }
|
| -
|
| - if (!extra_args || !extra_args[0]) {
|
| - return E_INVALIDARG;
|
| - }
|
| -
|
| - CORE_LOG(L2, (_T("[OneClickControl::Install2][extra_args \"%s\"]"),
|
| - CW2CT(extra_args)));
|
| -
|
| - CommandLineBuilder builder(COMMANDLINE_MODE_INSTALL);
|
| - builder.set_extra_args(CString(extra_args));
|
| - return DoInstall(builder.GetCommandLineArgs());
|
| -}
|
| -
|
| -STDMETHODIMP OneClickControl::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("[OneClickControl::GetInstalledVersion][%s][%d]"),
|
| - guid_string, is_machine));
|
| -
|
| - CString version;
|
| - HRESULT hr = DoGetInstalledVersion(guid_string,
|
| - is_machine == VARIANT_TRUE,
|
| - &version);
|
| - if (SUCCEEDED(hr)) {
|
| - *version_string = version.AllocSysString();
|
| - }
|
| -
|
| - return S_OK;
|
| -}
|
| -
|
| -STDMETHODIMP OneClickControl::GetOneClickVersion(long* version) { // NOLINT
|
| - ASSERT1(version);
|
| -
|
| - if (!site_lock_.InApprovedDomain(this)) {
|
| - return GOOPDATE_E_ONECLICK_HOSTCHECK_FAILED;
|
| - }
|
| -
|
| - CORE_LOG(L2, (_T("[OneClickControl::GetOneClickVersion]")));
|
| -
|
| - if (!version) {
|
| - return E_POINTER;
|
| - }
|
| -
|
| - *version = atoi(ONECLICK_PLUGIN_VERSION_ANSI); // NOLINT
|
| - return S_OK;
|
| -}
|
| -
|
| -STDMETHODIMP OneClickControl::LaunchAppCommand(BSTR app_guid,
|
| - VARIANT_BOOL is_machine,
|
| - BSTR cmd_id) {
|
| - if (!site_lock_.InApprovedDomain(this)) {
|
| - return GOOPDATE_E_ONECLICK_HOSTCHECK_FAILED;
|
| - }
|
| -
|
| - CORE_LOG(L2, (_T("[OneClickControl::LaunchAppCommand]")));
|
| -
|
| - ExceptionBarrier barrier;
|
| -
|
| - 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("[OneClickControl::LaunchAppCommand]")
|
| - _T("[Failed to CoCreate OneClickMachine/User ")
|
| - _T("ProcessLauncher implementation: 0x%x"),
|
| - hr));
|
| - return hr;
|
| - }
|
| -
|
| - return process_launcher->LaunchAppCommand(app_guid, cmd_id);
|
| -}
|
| -
|
| -HRESULT OneClickControl::DoGetInstalledVersion(const TCHAR* guid_string,
|
| - bool is_machine,
|
| - CString* version_string) {
|
| - 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 OneClickControl::DoInstall(const TCHAR* cmd_line_args) {
|
| - ASSERT1(cmd_line_args);
|
| -
|
| - CORE_LOG(L2, (_T("[OneClickControl::DoInstall][%s]"), cmd_line_args));
|
| -
|
| -#ifdef _DEBUG
|
| - // If the args are exactly __DIRECTNOTIFY__ then just fire the event
|
| - // out of this thread. This allows for easy testing of the
|
| - // browser interface without requiring launch of
|
| - // google_update.exe.
|
| - if (0 == _wcsicmp(L"__DIRECTNOTIFY__", cmd_line_args)) {
|
| - return S_OK;
|
| - }
|
| -#endif
|
| -
|
| - CString browser_url;
|
| - HRESULT 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;
|
| - }
|
| -
|
| - CString url_domain_encoded;
|
| - CString cmd_line_args_encoded;
|
| - hr = StringEscape(url_domain, false, &url_domain_encoded);
|
| - if (FAILED(hr)) {
|
| - return hr;
|
| - }
|
| -
|
| - hr = StringEscape(cmd_line_args, false, &cmd_line_args_encoded);
|
| - if (FAILED(hr)) {
|
| - return hr;
|
| - }
|
| -
|
| - CommandLineBuilder builder(COMMANDLINE_MODE_WEBPLUGIN);
|
| - builder.set_webplugin_url_domain(url_domain_encoded);
|
| - builder.set_webplugin_args(cmd_line_args_encoded);
|
| - builder.set_install_source(kCmdLineInstallSource_OneClick);
|
| - CString final_cmd_line_args = builder.GetCommandLineArgs();
|
| -
|
| - CORE_LOG(L2, (_T("[OneClickControl::DoInstall]")
|
| - _T("[Final command line params: %s]"),
|
| - final_cmd_line_args));
|
| -
|
| - scoped_process process_goopdate;
|
| -
|
| - hr = goopdate_utils::StartGoogleUpdateWithArgs(
|
| - goopdate_utils::IsRunningFromOfficialGoopdateDir(true),
|
| - final_cmd_line_args,
|
| - address(process_goopdate));
|
| - if (FAILED(hr)) {
|
| - CORE_LOG(LE, (_T("[OneClickControl::DoInstall]")
|
| - _T("[Failed StartGoogleUpdateWithArgs][0x%x]"), hr));
|
| - return hr;
|
| - }
|
| -
|
| - return S_OK;
|
| -}
|
| -
|
| -bool OneClickControl::VariantIsValidCallback(const VARIANT* callback) {
|
| - return callback &&
|
| - (callback->vt == VT_NULL ||
|
| - callback->vt == VT_EMPTY ||
|
| - (callback->vt == VT_DISPATCH && callback->pdispVal));
|
| -}
|
| -
|
| -HRESULT OneClickControl::InvokeJavascriptCallback(VARIANT* callback,
|
| - const HRESULT* opt_param) {
|
| - if (!callback || callback->vt == VT_NULL || callback->vt == VT_EMPTY) {
|
| - return S_FALSE;
|
| - }
|
| -
|
| - if (callback->vt != VT_DISPATCH || !callback->pdispVal) {
|
| - return E_FAIL;
|
| - }
|
| -
|
| - const DISPID kDispId0 = 0;
|
| - DISPPARAMS dispparams = {0};
|
| -
|
| - CComQIPtr<IDispatchEx> dispatchex = callback->pdispVal;
|
| - if (dispatchex) {
|
| - DISPID disp_this = DISPID_THIS;
|
| - VARIANT var[2];
|
| - var[0].vt = VT_DISPATCH;
|
| - var[0].pdispVal = dispatchex;
|
| - if (opt_param) {
|
| - var[1].vt = VT_I4;
|
| - var[1].intVal = *opt_param;
|
| - }
|
| -
|
| - dispparams.rgvarg = var;
|
| - dispparams.rgdispidNamedArgs = &disp_this;
|
| - dispparams.cNamedArgs = 1;
|
| - dispparams.cArgs = opt_param ? 2 : 1;
|
| -
|
| - return dispatchex->InvokeEx(kDispId0, LOCALE_USER_DEFAULT,
|
| - DISPATCH_METHOD, &dispparams,
|
| - NULL, NULL, NULL);
|
| - } else {
|
| - // Fallback on IDispatch if needed. (This route will be used for NPAPI
|
| - // functions wrapped via NPFunctionHost.)
|
| -
|
| - UINT arg_err = 0;
|
| - VARIANT var[1];
|
| -
|
| - if (opt_param) {
|
| - var[0].vt = VT_I4;
|
| - var[0].intVal = *opt_param;
|
| - dispparams.rgvarg = var;
|
| - dispparams.cArgs = 1;
|
| - }
|
| -
|
| - return callback->pdispVal->Invoke(kDispId0,
|
| - IID_NULL,
|
| - LOCALE_SYSTEM_DEFAULT,
|
| - DISPATCH_METHOD,
|
| - &dispparams,
|
| - NULL,
|
| - NULL,
|
| - &arg_err);
|
| - }
|
| -}
|
| -
|
| -// This works during Setup because IsRunningFromOfficialGoopdateDir checks the
|
| -// location of the DLL not the exe, which is running from a temp location.
|
| -CString OneClickControl::GetGoopdateShellPathForRegMap() {
|
| - ASSERT1(goopdate_utils::IsRunningFromOfficialGoopdateDir(false) ||
|
| - goopdate_utils::IsRunningFromOfficialGoopdateDir(true));
|
| - return goopdate_utils::BuildGoogleUpdateExeDir(
|
| - goopdate_utils::IsRunningFromOfficialGoopdateDir(true));
|
| -}
|
| -
|
| -} // namespace omaha
|
| -
|
| -// 4505: unreferenced local function has been removed
|
| -#pragma warning(disable : 4505)
|
| -
|
|
|