diff options
-rw-r--r-- | chrome/browser/history/history_publisher_win.cc | 38 | ||||
-rw-r--r-- | chrome/browser/ui/views/accessibility/browser_views_accessibility_browsertest.cc | 129 | ||||
-rw-r--r-- | chrome_frame/update_launcher.cc | 10 | ||||
-rw-r--r-- | net/url_request/url_request_unittest.cc | 28 | ||||
-rw-r--r-- | printing/backend/win_helper.cc | 46 | ||||
-rw-r--r-- | ui/base/dialogs/base_shell_dialog_win.cc | 1 |
6 files changed, 116 insertions, 136 deletions
diff --git a/chrome/browser/history/history_publisher_win.cc b/chrome/browser/history/history_publisher_win.cc index 51c72a6..ac04a87 100644 --- a/chrome/browser/history/history_publisher_win.cc +++ b/chrome/browser/history/history_publisher_win.cc @@ -20,36 +20,22 @@ namespace { -// Instantiates a IChromeHistoryIndexer COM object. Takes a COM class id -// in |name| and returns the object in |indexer|. Returns false if the -// operation fails. -bool CoCreateIndexerFromName(const wchar_t* name, - IChromeHistoryIndexer** indexer) { - CLSID clsid; - HRESULT hr = CLSIDFromString(const_cast<wchar_t*>(name), &clsid); - if (FAILED(hr)) - return false; - hr = CoCreateInstance(clsid, NULL, CLSCTX_INPROC, - __uuidof(IChromeHistoryIndexer), - reinterpret_cast<void**>(indexer)); - if (FAILED(hr)) - return false; - return true; -} - // Instantiates the registered indexers from the registry |root| + |path| key // and adds them to the |indexers| list. -void AddRegisteredIndexers(HKEY root, const wchar_t* path, +void AddRegisteredIndexers( + HKEY root, + const wchar_t* path, std::vector< base::win::ScopedComPtr<IChromeHistoryIndexer> >* indexers) { - IChromeHistoryIndexer* indexer; - base::win::RegistryKeyIterator r_iter(root, path); - while (r_iter.Valid()) { - if (CoCreateIndexerFromName(r_iter.Name(), &indexer)) { - indexers->push_back( - base::win::ScopedComPtr<IChromeHistoryIndexer>(indexer)); - indexer->Release(); + for (base::win::RegistryKeyIterator r_iter(root, path); r_iter.Valid(); + ++r_iter) { + CLSID clsid; + if (FAILED(CLSIDFromString(const_cast<wchar_t*>(r_iter.Name()), &clsid))) + continue; + base::win::ScopedComPtr<IChromeHistoryIndexer> indexer; + if (SUCCEEDED(indexer.CreateInstance(clsid, NULL, CLSCTX_INPROC))) { + indexers->push_back(indexer); + indexer.Release(); } - ++r_iter; } } diff --git a/chrome/browser/ui/views/accessibility/browser_views_accessibility_browsertest.cc b/chrome/browser/ui/views/accessibility/browser_views_accessibility_browsertest.cc index b785f00..b152c81 100644 --- a/chrome/browser/ui/views/accessibility/browser_views_accessibility_browsertest.cc +++ b/chrome/browser/ui/views/accessibility/browser_views_accessibility_browsertest.cc @@ -31,82 +31,87 @@ VARIANT id_self = {VT_I4, CHILDID_SELF}; class BrowserViewsAccessibilityTest : public InProcessBrowserTest { public: - BrowserViewsAccessibilityTest() { - ui::win::CreateATLModuleIfNeeded(); - ::CoInitialize(NULL); - } + BrowserViewsAccessibilityTest(); + virtual ~BrowserViewsAccessibilityTest(); - ~BrowserViewsAccessibilityTest() { - ::CoUninitialize(); - } + // Retrieves an instance of BrowserWindowTesting. + BrowserWindowTesting* GetBrowserWindowTesting(); - // Retrieves an instance of BrowserWindowTesting - BrowserWindowTesting* GetBrowserWindowTesting() { - BrowserWindow* browser_window = browser()->window(); + // Retrieve an instance of BrowserView. + BrowserView* GetBrowserView(); - if (!browser_window) - return NULL; - - return browser_window->GetBrowserWindowTesting(); - } + // Retrieves and initializes an instance of ToolbarView. + ToolbarView* GetToolbarView(); - // Retrieve an instance of BrowserView - BrowserView* GetBrowserView() { - return BrowserView::GetBrowserViewForBrowser(browser()); - } + // Retrieves and initializes an instance of BookmarkBarView. + BookmarkBarView* GetBookmarkBarView(); - // Retrieves and initializes an instance of ToolbarView. - ToolbarView* GetToolbarView() { - BrowserWindowTesting* browser_window_testing = GetBrowserWindowTesting(); + // Retrieves and verifies the accessibility object for the given View. + void TestViewAccessibilityObject(views::View* view, + std::wstring name, + int32 role); - if (!browser_window_testing) - return NULL; + // Verifies MSAA Name and Role properties of the given IAccessible. + void TestAccessibilityInfo(IAccessible* acc_obj, + std::wstring name, + int32 role); +}; - return browser_window_testing->GetToolbarView(); - } +BrowserViewsAccessibilityTest::BrowserViewsAccessibilityTest() { + ui::win::CreateATLModuleIfNeeded(); + ::CoInitialize(NULL); +} - // Retrieves and initializes an instance of BookmarkBarView. - BookmarkBarView* GetBookmarkBarView() { - BrowserWindowTesting* browser_window_testing = GetBrowserWindowTesting(); +BrowserViewsAccessibilityTest::~BrowserViewsAccessibilityTest() { + ::CoUninitialize(); +} - if (!browser_window_testing) - return NULL; +BrowserWindowTesting* BrowserViewsAccessibilityTest::GetBrowserWindowTesting() { + BrowserWindow* browser_window = browser()->window(); + return browser_window ? browser_window->GetBrowserWindowTesting() : NULL; +} - return browser_window_testing->GetBookmarkBarView(); - } +BrowserView* BrowserViewsAccessibilityTest::GetBrowserView() { + return BrowserView::GetBrowserViewForBrowser(browser()); +} - // Retrieves and verifies the accessibility object for the given View. - void TestViewAccessibilityObject(views::View* view, std::wstring name, - int32 role) { - ASSERT_TRUE(NULL != view); +ToolbarView* BrowserViewsAccessibilityTest::GetToolbarView() { + BrowserWindowTesting* browser_window_testing = GetBrowserWindowTesting(); + return browser_window_testing ? + browser_window_testing->GetToolbarView() : NULL; +} - TestAccessibilityInfo(view->GetNativeViewAccessible(), name, role); - } +BookmarkBarView* BrowserViewsAccessibilityTest::GetBookmarkBarView() { + BrowserWindowTesting* browser_window_testing = GetBrowserWindowTesting(); + return browser_window_testing ? + browser_window_testing->GetBookmarkBarView() : NULL; +} +void BrowserViewsAccessibilityTest::TestViewAccessibilityObject( + views::View* view, + std::wstring name, + int32 role) { + ASSERT_TRUE(view != NULL); + TestAccessibilityInfo(view->GetNativeViewAccessible(), name, role); +} - // Verifies MSAA Name and Role properties of the given IAccessible. - void TestAccessibilityInfo(IAccessible* acc_obj, std::wstring name, - int32 role) { - // Verify MSAA Name property. - BSTR acc_name; - - HRESULT hr = acc_obj->get_accName(id_self, &acc_name); - ASSERT_EQ(S_OK, hr); - EXPECT_STREQ(acc_name, name.c_str()); - - // Verify MSAA Role property. - VARIANT acc_role; - ::VariantInit(&acc_role); - - hr = acc_obj->get_accRole(id_self, &acc_role); - ASSERT_EQ(S_OK, hr); - EXPECT_EQ(VT_I4, acc_role.vt); - EXPECT_EQ(role, acc_role.lVal); - - ::VariantClear(&acc_role); - ::SysFreeString(acc_name); - } -}; +void BrowserViewsAccessibilityTest::TestAccessibilityInfo(IAccessible* acc_obj, + std::wstring name, + int32 role) { + // Verify MSAA Name property. + BSTR acc_name; + ASSERT_EQ(S_OK, acc_obj->get_accName(id_self, &acc_name)); + EXPECT_STREQ(name.c_str(), acc_name); + ::SysFreeString(acc_name); + + // Verify MSAA Role property. + VARIANT acc_role; + ::VariantInit(&acc_role); + ASSERT_EQ(S_OK, acc_obj->get_accRole(id_self, &acc_role)); + EXPECT_EQ(VT_I4, acc_role.vt); + EXPECT_EQ(role, acc_role.lVal); + ::VariantClear(&acc_role); +} // Retrieve accessibility object for main window and verify accessibility info. IN_PROC_BROWSER_TEST_F(BrowserViewsAccessibilityTest, diff --git a/chrome_frame/update_launcher.cc b/chrome_frame/update_launcher.cc index 789e8db..b2d23123 100644 --- a/chrome_frame/update_launcher.cc +++ b/chrome_frame/update_launcher.cc @@ -21,13 +21,9 @@ const wchar_t kUpdateCommandFlag[] = L"--update-cmd"; // exit code, or kLaunchFailureExitCode if an error occurs in the waiting. DWORD WaitForProcessExitCode(HANDLE handle) { DWORD exit_code = 0; - - DWORD wait_result = ::WaitForSingleObject(handle, INFINITE); - - if (wait_result == WAIT_OBJECT_0 && ::GetExitCodeProcess(handle, &exit_code)) - return exit_code; - - return kLaunchFailureExitCode; + return ((::WaitForSingleObject(handle, INFINITE) == WAIT_OBJECT_0) && + ::GetExitCodeProcess(handle, &exit_code)) ? + exit_code : kLaunchFailureExitCode; } } // namespace diff --git a/net/url_request/url_request_unittest.cc b/net/url_request/url_request_unittest.cc index 2dbe023..d38c527 100644 --- a/net/url_request/url_request_unittest.cc +++ b/net/url_request/url_request_unittest.cc @@ -702,25 +702,19 @@ TEST_F(URLRequestTest, ResolveShortcutTest) { std::wstring lnk_path = app_path.value() + L".lnk"; - HRESULT result; - IShellLink* shell = NULL; - IPersistFile* persist = NULL; - CoInitialize(NULL); + // Temporarily create a shortcut for test - result = CoCreateInstance(CLSID_ShellLink, NULL, - CLSCTX_INPROC_SERVER, IID_IShellLink, - reinterpret_cast<LPVOID*>(&shell)); - ASSERT_TRUE(SUCCEEDED(result)); - result = shell->QueryInterface(IID_IPersistFile, - reinterpret_cast<LPVOID*>(&persist)); - ASSERT_TRUE(SUCCEEDED(result)); - result = shell->SetPath(app_path.value().c_str()); - EXPECT_TRUE(SUCCEEDED(result)); - result = shell->SetDescription(L"ResolveShortcutTest"); - EXPECT_TRUE(SUCCEEDED(result)); - result = persist->Save(lnk_path.c_str(), TRUE); - EXPECT_TRUE(SUCCEEDED(result)); + IShellLink* shell = NULL; + ASSERT_TRUE(SUCCEEDED(CoCreateInstance( + CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, + reinterpret_cast<LPVOID*>(&shell)))); + IPersistFile* persist = NULL; + ASSERT_TRUE(SUCCEEDED(shell->QueryInterface( + IID_IPersistFile, reinterpret_cast<LPVOID*>(&persist)))); + EXPECT_TRUE(SUCCEEDED(shell->SetPath(app_path.value().c_str()))); + EXPECT_TRUE(SUCCEEDED(shell->SetDescription(L"ResolveShortcutTest"))); + EXPECT_TRUE(SUCCEEDED(persist->Save(lnk_path.c_str(), TRUE))); if (persist) persist->Release(); if (shell) diff --git a/printing/backend/win_helper.cc b/printing/backend/win_helper.cc index 5980291..071ef54 100644 --- a/printing/backend/win_helper.cc +++ b/printing/backend/win_helper.cc @@ -239,29 +239,29 @@ HRESULT XPSModule::CloseProvider(HPTPROVIDER provider) { } ScopedXPSInitializer::ScopedXPSInitializer() : initialized_(false) { - if (XPSModule::Init()) { - // Calls to XPS APIs typically require the XPS provider to be opened with - // PTOpenProvider. PTOpenProvider calls CoInitializeEx with - // COINIT_MULTITHREADED. We have seen certain buggy HP printer driver DLLs - // that call CoInitializeEx with COINIT_APARTMENTTHREADED in the context of - // PTGetPrintCapabilities. This call fails but the printer driver calls - // CoUninitialize anyway. This results in the apartment being torn down too - // early and the msxml DLL being unloaded which in turn causes code in - // unidrvui.dll to have a dangling pointer to an XML document which causes a - // crash. To protect ourselves from such drivers we make sure we always have - // an extra CoInitialize (calls to CoInitialize/CoUninitialize are - // refcounted). - HRESULT coinit_ret = CoInitializeEx(NULL, COINIT_MULTITHREADED); - // If this succeeded we are done because the PTOpenProvider call will - // provide the extra refcount on the apartment. If it failed because someone - // already called CoInitializeEx with COINIT_APARTMENTTHREADED, we try - // the other model to provide the additional refcount (since we don't know - // which model buggy printer drivers will use). - if (coinit_ret == RPC_E_CHANGED_MODE) - coinit_ret = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); - DCHECK(SUCCEEDED(coinit_ret)); - initialized_ = true; - } + if (!XPSModule::Init()) + return; + // Calls to XPS APIs typically require the XPS provider to be opened with + // PTOpenProvider. PTOpenProvider calls CoInitializeEx with + // COINIT_MULTITHREADED. We have seen certain buggy HP printer driver DLLs + // that call CoInitializeEx with COINIT_APARTMENTTHREADED in the context of + // PTGetPrintCapabilities. This call fails but the printer driver calls + // CoUninitialize anyway. This results in the apartment being torn down too + // early and the msxml DLL being unloaded which in turn causes code in + // unidrvui.dll to have a dangling pointer to an XML document which causes a + // crash. To protect ourselves from such drivers we make sure we always have + // an extra CoInitialize (calls to CoInitialize/CoUninitialize are + // refcounted). + HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED); + // If this succeeded we are done because the PTOpenProvider call will provide + // the extra refcount on the apartment. If it failed because someone already + // called CoInitializeEx with COINIT_APARTMENTTHREADED, we try the other model + // to provide the additional refcount (since we don't know which model buggy + // printer drivers will use). + if (!SUCCEEDED(hr)) + hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); + DCHECK(SUCCEEDED(hr)); + initialized_ = true; } ScopedXPSInitializer::~ScopedXPSInitializer() { diff --git a/ui/base/dialogs/base_shell_dialog_win.cc b/ui/base/dialogs/base_shell_dialog_win.cc index 077a8a1..8d6072d 100644 --- a/ui/base/dialogs/base_shell_dialog_win.cc +++ b/ui/base/dialogs/base_shell_dialog_win.cc @@ -19,7 +19,6 @@ class ShellDialogThread : public base::Thread { protected: void Init(); - void CleanUp(); private: |