Update SkCoInitialize to better match spec.
http://codereview.appspot.com/5036044/
git-svn-id: http://skia.googlecode.com/svn/trunk@2274 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/include/utils/win/SkAutoCoInitialize.h b/include/utils/win/SkAutoCoInitialize.h
index 2114043..709fa6b 100644
--- a/include/utils/win/SkAutoCoInitialize.h
+++ b/include/utils/win/SkAutoCoInitialize.h
@@ -18,13 +18,13 @@
* An instance of this class initializes COM on creation
* and closes the COM library on destruction.
*/
-class AutoCoInitialize : SkNoncopyable {
+class SkAutoCoInitialize : SkNoncopyable {
private:
HRESULT fHR;
public:
- AutoCoInitialize();
- ~AutoCoInitialize();
- HRESULT getHR();
+ SkAutoCoInitialize();
+ ~SkAutoCoInitialize();
+ bool succeeded();
};
#endif
diff --git a/src/ports/SkImageDecoder_WIC.cpp b/src/ports/SkImageDecoder_WIC.cpp
index 48a927d..a69ed4a 100644
--- a/src/ports/SkImageDecoder_WIC.cpp
+++ b/src/ports/SkImageDecoder_WIC.cpp
@@ -25,8 +25,12 @@
bool SkImageDecoder_WIC::onDecode(SkStream* stream, SkBitmap* bm, Mode mode) {
//Initialize COM.
- AutoCoInitialize scopedCo;
- HRESULT hr = scopedCo.getHR();
+ SkAutoCoInitialize scopedCo;
+ if (!scopedCo.succeeded()) {
+ return false;
+ }
+
+ HRESULT hr = S_OK;
//Create Windows Imaging Component ImagingFactory.
SkTScopedComPtr<IWICImagingFactory> piImagingFactory;
@@ -189,8 +193,12 @@
}
//Initialize COM.
- AutoCoInitialize scopedCo;
- HRESULT hr = scopedCo.getHR();
+ SkAutoCoInitialize scopedCo;
+ if (!scopedCo.succeeded()) {
+ return false;
+ }
+
+ HRESULT hr = S_OK;
//Create Windows Imaging Component ImagingFactory.
SkTScopedComPtr<IWICImagingFactory> piImagingFactory;
diff --git a/src/utils/win/SkAutoCoInitialize.cpp b/src/utils/win/SkAutoCoInitialize.cpp
index 460606b..dd6e936 100644
--- a/src/utils/win/SkAutoCoInitialize.cpp
+++ b/src/utils/win/SkAutoCoInitialize.cpp
@@ -12,16 +12,18 @@
#include <ole2.h>
#include "SkAutoCoInitialize.h"
-AutoCoInitialize::AutoCoInitialize() :
+SkAutoCoInitialize::SkAutoCoInitialize() :
fHR(
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE)
)
{ }
-AutoCoInitialize::~AutoCoInitialize() {
+SkAutoCoInitialize::~SkAutoCoInitialize() {
if (SUCCEEDED(this->fHR)) {
CoUninitialize();
}
}
-HRESULT AutoCoInitialize::getHR() { return this->fHR; }
+bool SkAutoCoInitialize::succeeded() {
+ return SUCCEEDED(this->fHR) || RPC_E_CHANGED_MODE == this->fHR;
+}