summaryrefslogtreecommitdiffstats
path: root/chrome_frame
diff options
context:
space:
mode:
authorpkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-03 17:14:48 +0000
committerpkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-03 17:14:48 +0000
commit451fd90d924b6fd4e6f208952b525cab2029cd6d (patch)
tree6cf9bec9c237224f6d70de9ea5c1cee7d31cd63f /chrome_frame
parent748d7a09fe3c109b5a829ebabdc97edd347f42e6 (diff)
downloadchromium_src-451fd90d924b6fd4e6f208952b525cab2029cd6d.zip
chromium_src-451fd90d924b6fd4e6f208952b525cab2029cd6d.tar.gz
chromium_src-451fd90d924b6fd4e6f208952b525cab2029cd6d.tar.bz2
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
Diffstat (limited to 'chrome_frame')
-rw-r--r--chrome_frame/test/reliability/reliability_test_suite.h18
-rw-r--r--chrome_frame/update_launcher.cc14
-rw-r--r--chrome_frame/urlmon_url_request.cc4
-rw-r--r--chrome_frame/urlmon_url_request.h11
-rw-r--r--chrome_frame/utils.h21
5 files changed, 43 insertions, 25 deletions
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 <objbase.h>
-
+#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<base::win::ScopedCOMInitializer> 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 <windows.h>
#include <Shellapi.h>
+#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<void**>(&ipl));
+ HRESULT hr = ::CoCreateInstance(__uuidof(ProcessLauncherClass), NULL,
+ CLSCTX_ALL, __uuidof(IProcessLauncher),
+ reinterpret_cast<void**>(&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<base::win::ScopedCOMInitializer> 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<base::win::ScopedCOMInitializer> com_initializer_;
+
+ DISALLOW_COPY_AND_ASSIGN(STAThread);
};
std::wstring GuidToString(const GUID& guid);