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;
+}