OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/utility/importer/ie_importer_win.h" | 5 #include "chrome/utility/importer/ie_importer_win.h" |
6 | 6 |
7 #include <ole2.h> | 7 #include <ole2.h> |
8 #include <intshcut.h> | 8 #include <intshcut.h> |
9 #include <shlobj.h> | 9 #include <shlobj.h> |
10 #include <stddef.h> | 10 #include <stddef.h> |
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
316 } | 316 } |
317 | 317 |
318 // Reads the URL of the favicon of the internet shortcut. | 318 // Reads the URL of the favicon of the internet shortcut. |
319 GURL ReadFaviconURLFromInternetShortcut(IUniformResourceLocator* url_locator) { | 319 GURL ReadFaviconURLFromInternetShortcut(IUniformResourceLocator* url_locator) { |
320 base::win::ScopedComPtr<IPropertySetStorage> property_set_storage; | 320 base::win::ScopedComPtr<IPropertySetStorage> property_set_storage; |
321 if (FAILED(property_set_storage.QueryFrom(url_locator))) | 321 if (FAILED(property_set_storage.QueryFrom(url_locator))) |
322 return GURL(); | 322 return GURL(); |
323 | 323 |
324 base::win::ScopedComPtr<IPropertyStorage> property_storage; | 324 base::win::ScopedComPtr<IPropertyStorage> property_storage; |
325 if (FAILED(property_set_storage->Open(FMTID_Intshcut, STGM_READ, | 325 if (FAILED(property_set_storage->Open(FMTID_Intshcut, STGM_READ, |
326 property_storage.Receive()))) { | 326 property_storage.GetAddressOf()))) { |
327 return GURL(); | 327 return GURL(); |
328 } | 328 } |
329 | 329 |
330 PROPSPEC properties[] = {{PRSPEC_PROPID, {PID_IS_ICONFILE}}}; | 330 PROPSPEC properties[] = {{PRSPEC_PROPID, {PID_IS_ICONFILE}}}; |
331 // ReadMultiple takes a non-const array of PROPVARIANTs, but since this code | 331 // ReadMultiple takes a non-const array of PROPVARIANTs, but since this code |
332 // only needs an array of size 1: a non-const pointer to |output| is | 332 // only needs an array of size 1: a non-const pointer to |output| is |
333 // equivalent. | 333 // equivalent. |
334 base::win::ScopedPropVariant output; | 334 base::win::ScopedPropVariant output; |
335 // ReadMultiple can return S_FALSE (FAILED(S_FALSE) is false) when the | 335 // ReadMultiple can return S_FALSE (FAILED(S_FALSE) is false) when the |
336 // property is not found, in which case output[0].vt is set to VT_EMPTY. | 336 // property is not found, in which case output[0].vt is set to VT_EMPTY. |
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
506 url::kFtpScheme, | 506 url::kFtpScheme, |
507 url::kFileScheme}; | 507 url::kFileScheme}; |
508 int total_schemes = arraysize(kSchemes); | 508 int total_schemes = arraysize(kSchemes); |
509 | 509 |
510 base::win::ScopedComPtr<IUrlHistoryStg2> url_history_stg2; | 510 base::win::ScopedComPtr<IUrlHistoryStg2> url_history_stg2; |
511 if (FAILED(url_history_stg2.CreateInstance(CLSID_CUrlHistory, NULL, | 511 if (FAILED(url_history_stg2.CreateInstance(CLSID_CUrlHistory, NULL, |
512 CLSCTX_INPROC_SERVER))) { | 512 CLSCTX_INPROC_SERVER))) { |
513 return; | 513 return; |
514 } | 514 } |
515 base::win::ScopedComPtr<IEnumSTATURL> enum_url; | 515 base::win::ScopedComPtr<IEnumSTATURL> enum_url; |
516 if (SUCCEEDED(url_history_stg2->EnumUrls(enum_url.Receive()))) { | 516 if (SUCCEEDED(url_history_stg2->EnumUrls(enum_url.GetAddressOf()))) { |
517 std::vector<ImporterURLRow> rows; | 517 std::vector<ImporterURLRow> rows; |
518 STATURL stat_url; | 518 STATURL stat_url; |
519 | 519 |
520 // IEnumSTATURL::Next() doesn't fill STATURL::dwFlags by default. Need to | 520 // IEnumSTATURL::Next() doesn't fill STATURL::dwFlags by default. Need to |
521 // call IEnumSTATURL::SetFilter() with STATURL_QUERYFLAG_TOPLEVEL flag to | 521 // call IEnumSTATURL::SetFilter() with STATURL_QUERYFLAG_TOPLEVEL flag to |
522 // specify how STATURL structure will be filled. | 522 // specify how STATURL structure will be filled. |
523 // The first argument of IEnumSTATURL::SetFilter() specifies the URL prefix | 523 // The first argument of IEnumSTATURL::SetFilter() specifies the URL prefix |
524 // that is used by IEnumSTATURL::Next() for filtering items by URL. | 524 // that is used by IEnumSTATURL::Next() for filtering items by URL. |
525 // So need to pass an empty string here to get all history items. | 525 // So need to pass an empty string here to get all history items. |
526 enum_url->SetFilter(L"", STATURL_QUERYFLAG_TOPLEVEL); | 526 enum_url->SetFilter(L"", STATURL_QUERYFLAG_TOPLEVEL); |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
582 if (!pstorec_dll) | 582 if (!pstorec_dll) |
583 return; | 583 return; |
584 PStoreCreateFunc PStoreCreateInstance = | 584 PStoreCreateFunc PStoreCreateInstance = |
585 (PStoreCreateFunc)GetProcAddress(pstorec_dll, "PStoreCreateInstance"); | 585 (PStoreCreateFunc)GetProcAddress(pstorec_dll, "PStoreCreateInstance"); |
586 if (!PStoreCreateInstance) { | 586 if (!PStoreCreateInstance) { |
587 FreeLibrary(pstorec_dll); | 587 FreeLibrary(pstorec_dll); |
588 return; | 588 return; |
589 } | 589 } |
590 | 590 |
591 base::win::ScopedComPtr<IPStore, &IID_IPStore> pstore; | 591 base::win::ScopedComPtr<IPStore, &IID_IPStore> pstore; |
592 HRESULT result = PStoreCreateInstance(pstore.Receive(), 0, 0, 0); | 592 HRESULT result = PStoreCreateInstance(pstore.GetAddressOf(), 0, 0, 0); |
593 if (result != S_OK) { | 593 if (result != S_OK) { |
594 FreeLibrary(pstorec_dll); | 594 FreeLibrary(pstorec_dll); |
595 return; | 595 return; |
596 } | 596 } |
597 | 597 |
598 std::vector<AutoCompleteInfo> ac_list; | 598 std::vector<AutoCompleteInfo> ac_list; |
599 | 599 |
600 // Enumerates AutoComplete items in the protected database. | 600 // Enumerates AutoComplete items in the protected database. |
601 base::win::ScopedComPtr<IEnumPStoreItems, &IID_IEnumPStoreItems> item; | 601 base::win::ScopedComPtr<IEnumPStoreItems, &IID_IEnumPStoreItems> item; |
602 result = pstore->EnumItems(0, &AutocompleteGUID, | 602 result = pstore->EnumItems(0, &AutocompleteGUID, &AutocompleteGUID, 0, |
603 &AutocompleteGUID, 0, item.Receive()); | 603 item.GetAddressOf()); |
604 if (result != PST_E_OK) { | 604 if (result != PST_E_OK) { |
605 pstore.Reset(); | 605 pstore.Reset(); |
606 FreeLibrary(pstorec_dll); | 606 FreeLibrary(pstorec_dll); |
607 return; | 607 return; |
608 } | 608 } |
609 | 609 |
610 wchar_t* item_name; | 610 wchar_t* item_name; |
611 while (!cancelled() && SUCCEEDED(item->Next(1, &item_name, 0))) { | 611 while (!cancelled() && SUCCEEDED(item->Next(1, &item_name, 0))) { |
612 DWORD length = 0; | 612 DWORD length = 0; |
613 unsigned char* buffer = NULL; | 613 unsigned char* buffer = NULL; |
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
911 static int version = -1; | 911 static int version = -1; |
912 if (version < 0) { | 912 if (version < 0) { |
913 wchar_t buffer[128]; | 913 wchar_t buffer[128]; |
914 DWORD buffer_length = sizeof(buffer); | 914 DWORD buffer_length = sizeof(buffer); |
915 base::win::RegKey reg_key(HKEY_LOCAL_MACHINE, kIEVersionKey, KEY_READ); | 915 base::win::RegKey reg_key(HKEY_LOCAL_MACHINE, kIEVersionKey, KEY_READ); |
916 LONG result = reg_key.ReadValue(L"Version", buffer, &buffer_length, NULL); | 916 LONG result = reg_key.ReadValue(L"Version", buffer, &buffer_length, NULL); |
917 version = ((result == ERROR_SUCCESS)? _wtoi(buffer) : 0); | 917 version = ((result == ERROR_SUCCESS)? _wtoi(buffer) : 0); |
918 } | 918 } |
919 return version; | 919 return version; |
920 } | 920 } |
OLD | NEW |