Index: goopdate/cocreate_async.cc |
diff --git a/goopdate/cocreate_async.cc b/goopdate/cocreate_async.cc |
deleted file mode 100644 |
index 31ba97ef685142b11f32b467e5277f03fb807316..0000000000000000000000000000000000000000 |
--- a/goopdate/cocreate_async.cc |
+++ /dev/null |
@@ -1,192 +0,0 @@ |
-// Copyright 2010 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/goopdate/cocreate_async.h" |
-#include "base/basictypes.h" |
-#include "base/debug.h" |
-#include "omaha/base/scope_guard.h" |
-#include "base/scoped_ptr_address.h" |
-#include "omaha/base/system.h" |
-#include "omaha/base/thread_pool_callback.h" |
-#include "omaha/base/vistautil.h" |
-#include "omaha/goopdate/goopdate.h" |
- |
-namespace omaha { |
- |
-CoCreateAsync::CoCreateAsync() : StdMarshalInfo(true) { |
-} |
- |
-STDMETHODIMP CoCreateAsync::createOmahaMachineServerAsync( |
- BSTR origin_url, |
- BOOL create_elevated, |
- ICoCreateAsyncStatus** status) { |
- CORE_LOG(L3, (L"[CoCreateAsync::createOmahaMachineServerAsync][%s][%d]", |
- origin_url, create_elevated)); |
- ASSERT1(status); |
- ASSERT1(origin_url && wcslen(origin_url)); |
- *status = NULL; |
- |
- if (create_elevated && |
- !vista_util::IsVistaOrLater() && !vista_util::IsUserAdmin()) { |
- return E_ACCESSDENIED; |
- } |
- |
- typedef CComObject<CoCreateAsyncStatus> ComObjectAsyncStatus; |
- scoped_ptr<ComObjectAsyncStatus> async_status; |
- HRESULT hr = ComObjectAsyncStatus::CreateInstance(address(async_status)); |
- if (FAILED(hr)) { |
- return hr; |
- } |
- |
- hr = async_status->CreateOmahaMachineServerAsync(origin_url, create_elevated); |
- if (FAILED(hr)) { |
- return hr; |
- } |
- |
- hr = async_status->QueryInterface(status); |
- if (FAILED(hr)) { |
- return hr; |
- } |
- |
- async_status.release(); |
- return S_OK; |
-} |
- |
-CoCreateAsyncStatus::CoCreateAsyncStatus() : is_done_(false), hr_(E_PENDING) { |
-} |
- |
-HRESULT CoCreateAsyncStatus::CreateOmahaMachineServerAsync( |
- BSTR origin_url, |
- BOOL create_elevated) { |
- // Create a thread pool work item for deferred execution of the CoCreate. The |
- // thread pool owns this call back object. |
- typedef ThreadPoolCallBack2<CoCreateAsyncStatus, |
- const CString, |
- BOOL> CallBack; |
- scoped_ptr<CallBack> |
- callback(new CallBack(this, |
- &CoCreateAsyncStatus::CreateOmahaMachineServer, |
- origin_url, |
- create_elevated)); |
- HRESULT hr = Goopdate::Instance().QueueUserWorkItem(callback.get(), |
- WT_EXECUTELONGFUNCTION); |
- if (FAILED(hr)) { |
- CORE_LOG(LE, (_T("[QueueUserWorkItem failed][0x%x]"), hr)); |
- return hr; |
- } |
- |
- VERIFY1(thread_started_gate_.Wait(INFINITE)); |
- |
- callback.release(); |
- return S_OK; |
-} |
- |
-void CoCreateAsyncStatus::CreateOmahaMachineServer(const CString origin_url, |
- BOOL create_elevated) { |
- CORE_LOG(L3, (_T("[CoCreateAsyncStatus::CreateOmahaMachineServer][%s][%d]"), |
- origin_url, create_elevated)); |
- AddRef(); |
- ON_SCOPE_EXIT_OBJ(*this, &CoCreateAsyncStatus::Release); |
- |
- VERIFY1(thread_started_gate_.Open()); |
- |
- HRESULT hr = E_FAIL; |
- CComPtr<IDispatch> ptr; |
- |
- // Since the values of hr and ptr are being modified after the scope guard, |
- // the variables are passed by reference instead of by values using ByRef. |
- ON_SCOPE_EXIT_OBJ(*this, |
- &CoCreateAsyncStatus::SetCreateInstanceResults, |
- ByRef(hr), |
- ByRef(ptr)); |
- |
- scoped_co_init init_com_apt(COINIT_MULTITHREADED); |
- hr = init_com_apt.hresult(); |
- if (FAILED(hr)) { |
- CORE_LOG(LE, (_T("[init_com_apt failed][0x%x]"), hr)); |
- return; |
- } |
- |
- CComPtr<IGoogleUpdate3WebSecurity> security; |
- REFCLSID clsid(__uuidof(GoogleUpdate3WebMachineClass)); |
- hr = create_elevated ? |
- System::CoCreateInstanceAsAdmin(NULL, clsid, IID_PPV_ARGS(&security)) : |
- ::CoCreateInstance(clsid, NULL, CLSCTX_ALL, IID_PPV_ARGS(&security)); |
- if (FAILED(hr)) { |
- CORE_LOG(LE, (_T("[CoCreate failed][0x%x]"), hr)); |
- return; |
- } |
- |
- hr = security->setOriginURL(CComBSTR(origin_url)); |
- if (FAILED(hr)) { |
- CORE_LOG(LE, (_T("[setOriginURL failed][0x%x]"), hr)); |
- return; |
- } |
- |
- hr = security.QueryInterface(&ptr); |
- if (FAILED(hr)) { |
- CORE_LOG(LE, (_T("[QueryInterface failed][0x%x]"), hr)); |
- return; |
- } |
-} |
- |
-void CoCreateAsyncStatus::SetCreateInstanceResults( |
- const HRESULT& hr, |
- const CComPtr<IDispatch>& ptr) { |
- CORE_LOG(L3, (_T("[SetCreateInstanceResults][0x%x][0x%p]"), hr, ptr)); |
- Lock(); |
- ON_SCOPE_EXIT_OBJ(*this, &CoCreateAsyncStatus::Unlock); |
- |
- hr_ = hr; |
- ptr_ = ptr; |
- is_done_ = true; |
-} |
- |
-// ICoCreateAsyncStatus. |
-STDMETHODIMP CoCreateAsyncStatus::get_isDone(VARIANT_BOOL* is_done) { |
- Lock(); |
- ON_SCOPE_EXIT_OBJ(*this, &CoCreateAsyncStatus::Unlock); |
- |
- ASSERT1(is_done); |
- |
- *is_done = is_done_ ? VARIANT_TRUE : VARIANT_FALSE; |
- CORE_LOG(L3, (_T("[get_isDone][%d]"), is_done_)); |
- return S_OK; |
-} |
- |
-STDMETHODIMP CoCreateAsyncStatus::get_completionHResult(LONG* hr) { |
- Lock(); |
- ON_SCOPE_EXIT_OBJ(*this, &CoCreateAsyncStatus::Unlock); |
- |
- ASSERT1(hr); |
- |
- *hr = hr_; |
- CORE_LOG(L3, (_T("[get_completionHResult][0x%x]"), hr_)); |
- return S_OK; |
-} |
- |
-STDMETHODIMP CoCreateAsyncStatus::get_createdInstance(IDispatch** instance) { |
- Lock(); |
- ON_SCOPE_EXIT_OBJ(*this, &CoCreateAsyncStatus::Unlock); |
- |
- ASSERT1(instance); |
- |
- ptr_.CopyTo(instance); |
- CORE_LOG(L3, (_T("[get_createdInstance][0x%p]"), *instance)); |
- return S_OK; |
-} |
- |
-} // namespace omaha |
- |