From 451fd90d924b6fd4e6f208952b525cab2029cd6d Mon Sep 17 00:00:00 2001 From: "pkasting@chromium.org" Date: Wed, 3 Oct 2012 17:14:48 +0000 Subject: Use ScopedCOMInitializer in more places. While this doesn't always simplify code, it does mean we do consistent logging and error-checking at all these sites. BUG=none TEST=none Review URL: https://codereview.chromium.org/11050009 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@159908 0039d316-1c4b-4281-b951-d872f2087c98 --- .../test/reliability/reliability_test_suite.h | 18 +++++++++++------- chrome_frame/update_launcher.cc | 14 ++++++-------- chrome_frame/urlmon_url_request.cc | 4 ++-- chrome_frame/urlmon_url_request.h | 11 +++++++++++ chrome_frame/utils.h | 21 +++++++++++++-------- 5 files changed, 43 insertions(+), 25 deletions(-) (limited to 'chrome_frame') diff --git a/chrome_frame/test/reliability/reliability_test_suite.h b/chrome_frame/test/reliability/reliability_test_suite.h index e245ba5..af58003 100644 --- a/chrome_frame/test/reliability/reliability_test_suite.h +++ b/chrome_frame/test/reliability/reliability_test_suite.h @@ -5,8 +5,7 @@ #ifndef CHROME_FRAME_TEST_RELIABILITY_RELIABILITY_TEST_SUITE_H_ #define CHROME_FRAME_TEST_RELIABILITY_RELIABILITY_TEST_SUITE_H_ -#include - +#include "base/win/scoped_com_initializer.h" #include "chrome_frame/test/reliability/page_load_test.h" #include "chrome/test/ui/ui_test_suite.h" @@ -15,17 +14,22 @@ class ReliabilityTestSuite : public UITestSuite { ReliabilityTestSuite(int argc, char** argv) : UITestSuite(argc, argv) { } - protected: - virtual void Initialize() { - CoInitializeEx(NULL, COINIT_MULTITHREADED); + private: + virtual void Initialize() OVERRIDE { + com_initializer_.reset(new base::win::ScopedCOMInitializer( + base::win::ScopedCOMInitializer::kMTA)); SetPageRange(*CommandLine::ForCurrentProcess()); UITestSuite::Initialize(); } - virtual void Shutdown() { - CoUninitialize(); + virtual void Shutdown() OVERRIDE { UITestSuite::Shutdown(); + com_initializer_.reset(); } + + scoped_ptr com_initializer_; + + DISALLOW_COPY_AND_ASSIGN(ReliabilityTestSuite); }; #endif // CHROME_FRAME_TEST_RELIABILITY_RELIABILITY_TEST_SUITE_H_ diff --git a/chrome_frame/update_launcher.cc b/chrome_frame/update_launcher.cc index b2d23123..439626d 100644 --- a/chrome_frame/update_launcher.cc +++ b/chrome_frame/update_launcher.cc @@ -7,6 +7,7 @@ #include #include +#include "base/win/scoped_com_initializer.h" #include "google_update/google_update_idl.h" namespace { @@ -54,15 +55,14 @@ std::wstring GetUpdateCommandFromArguments(const wchar_t* command_line) { DWORD LaunchUpdateCommand(const std::wstring& command) { DWORD exit_code = kLaunchFailureExitCode; - HRESULT hr = ::CoInitialize(NULL); - - if (SUCCEEDED(hr)) { + base::win::ScopedCOMInitializer com_initializer; + if (com_initializer.succeeded()) { IProcessLauncher* ipl = NULL; HANDLE process = NULL; - hr = ::CoCreateInstance(__uuidof(ProcessLauncherClass), NULL, - CLSCTX_ALL, __uuidof(IProcessLauncher), - reinterpret_cast(&ipl)); + HRESULT hr = ::CoCreateInstance(__uuidof(ProcessLauncherClass), NULL, + CLSCTX_ALL, __uuidof(IProcessLauncher), + reinterpret_cast(&ipl)); if (SUCCEEDED(hr)) { ULONG_PTR phandle = NULL; @@ -80,8 +80,6 @@ DWORD LaunchUpdateCommand(const std::wstring& command) { ::CloseHandle(process); if (ipl) ipl->Release(); - - ::CoUninitialize(); } return exit_code; diff --git a/chrome_frame/urlmon_url_request.cc b/chrome_frame/urlmon_url_request.cc index bf441b3..535debb 100644 --- a/chrome_frame/urlmon_url_request.cc +++ b/chrome_frame/urlmon_url_request.cc @@ -1455,9 +1455,9 @@ UrlmonUrlRequestManager::ResourceFetcherThread::~ResourceFetcherThread() { } void UrlmonUrlRequestManager::ResourceFetcherThread::Init() { - CoInitialize(NULL); + com_initializer_.reset(new base::win::ScopedCOMInitializer()); } void UrlmonUrlRequestManager::ResourceFetcherThread::CleanUp() { - CoUninitialize(); + com_initializer_.reset(); } diff --git a/chrome_frame/urlmon_url_request.h b/chrome_frame/urlmon_url_request.h index b74b881..94027ff 100644 --- a/chrome_frame/urlmon_url_request.h +++ b/chrome_frame/urlmon_url_request.h @@ -16,6 +16,12 @@ #include "chrome_frame/urlmon_moniker.h" #include "chrome_frame/utils.h" +namespace base { +namespace win { +class ScopedCOMInitializer; +} +} + class UrlmonUrlRequest; class UrlmonUrlRequestManager @@ -30,6 +36,11 @@ class UrlmonUrlRequestManager virtual void Init(); virtual void CleanUp(); + + private: + scoped_ptr com_initializer_; + + DISALLOW_COPY_AND_ASSIGN(ResourceFetcherThread); }; // Contains the privacy information for all requests issued by this instance. diff --git a/chrome_frame/utils.h b/chrome_frame/utils.h index a741b65..389a8f5 100644 --- a/chrome_frame/utils.h +++ b/chrome_frame/utils.h @@ -17,6 +17,7 @@ #include "base/metrics/histogram.h" #include "base/string16.h" #include "base/threading/thread.h" +#include "base/win/scoped_com_initializer.h" #include "base/win/scoped_comptr.h" #include "googleurl/src/gurl.h" #include "ui/gfx/rect.h" @@ -399,22 +400,26 @@ STDMETHODIMP QueryInterfaceIfDelegateSupports(void* obj, REFIID iid, class STAThread : public base::Thread { public: explicit STAThread(const char *name) : Thread(name) {} - ~STAThread() { + virtual ~STAThread() { Stop(); } + bool Start() { return StartWithOptions(Options(MessageLoop::TYPE_UI, 0)); } - protected: - // Called just prior to starting the message loop - virtual void Init() { - ::CoInitialize(0); + + private: + virtual void Init() OVERRIDE { + com_initializer_.reset(new base::win::ScopedCOMInitializer()); } - // Called just after the message loop ends - virtual void CleanUp() { - ::CoUninitialize(); + virtual void CleanUp() OVERRIDE { + com_initializer_.reset(); } + + scoped_ptr com_initializer_; + + DISALLOW_COPY_AND_ASSIGN(STAThread); }; std::wstring GuidToString(const GUID& guid); -- cgit v1.1