Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 // chrome_tab.cc : Implementation of DLL Exports. | 5 // chrome_tab.cc : Implementation of DLL Exports. |
| 6 | 6 |
| 7 // Include without path to make GYP build see it. | 7 // Include without path to make GYP build see it. |
| 8 #include "chrome_tab.h" // NOLINT | 8 #include "chrome_tab.h" // NOLINT |
| 9 | 9 |
| 10 #include <atlsecurity.h> | 10 #include <atlsecurity.h> |
| (...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 427 const wchar_t kChromeFramePrefix[] = L"chromeframe/"; | 427 const wchar_t kChromeFramePrefix[] = L"chromeframe/"; |
| 428 | 428 |
| 429 // To delete the user agent, set value to NULL. | 429 // To delete the user agent, set value to NULL. |
| 430 // The is_system parameter indicates whether this is a per machine or a per | 430 // The is_system parameter indicates whether this is a per machine or a per |
| 431 // user installation. | 431 // user installation. |
| 432 HRESULT SetChromeFrameUA(bool is_system, const wchar_t* value) { | 432 HRESULT SetChromeFrameUA(bool is_system, const wchar_t* value) { |
| 433 HRESULT hr = E_FAIL; | 433 HRESULT hr = E_FAIL; |
| 434 HKEY parent_hive = is_system ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; | 434 HKEY parent_hive = is_system ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; |
| 435 | 435 |
| 436 RegKey ua_key; | 436 RegKey ua_key; |
| 437 if (ua_key.Create(parent_hive, kPostPlatformUAKey, KEY_WRITE)) { | 437 if (ua_key.Create(parent_hive, kPostPlatformUAKey, KEY_READ | KEY_WRITE)) { |
| 438 | |
| 439 // Make sure that we unregister ChromeFrame UA strings registered previously | |
| 440 std::wstring chrome_frame_ua_pattern = kChromeFramePrefix; | |
| 441 chrome_frame_ua_pattern += L"*"; | |
| 442 | |
| 443 wchar_t name[MAX_PATH + 1] = {}; | |
| 444 wchar_t value[MAX_PATH + 1] = {}; | |
| 445 | |
| 446 for (DWORD value_index = 0; value_index < ua_key.ValueCount(); | |
|
amit
2011/01/14 06:38:51
nit: while (value_index < ua_key.ValueCount()) and
ananta
2011/01/14 06:44:11
Done.
| |
| 447 value_index++) { | |
| 448 DWORD name_size = arraysize(name); | |
| 449 DWORD value_size = arraysize(value); | |
| 450 DWORD type = 0; | |
| 451 LRESULT ret = ::RegEnumValue(ua_key.Handle(), | |
|
amit
2011/01/14 06:38:51
nit: fit more on one line to match rest of the sou
ananta
2011/01/14 06:44:11
Done.
| |
| 452 value_index, | |
| 453 name, | |
| 454 &name_size, | |
| 455 NULL, | |
| 456 &type, reinterpret_cast<BYTE*>(value), | |
| 457 &value_size); | |
| 458 if (ret == ERROR_SUCCESS) { | |
| 459 if (MatchPattern(name, chrome_frame_ua_pattern)) { | |
|
amit
2011/01/14 06:38:51
A simple StartsWith is enough instead of MatchPatt
ananta
2011/01/14 06:44:11
Done.
| |
| 460 ua_key.DeleteValue(name); | |
| 461 value_index--; | |
| 462 } | |
| 463 } else { | |
| 464 break; | |
| 465 } | |
| 466 } | |
| 467 | |
| 438 std::wstring chrome_frame_ua_value_name = kChromeFramePrefix; | 468 std::wstring chrome_frame_ua_value_name = kChromeFramePrefix; |
| 439 chrome_frame_ua_value_name += GetCurrentModuleVersion(); | 469 chrome_frame_ua_value_name += GetCurrentModuleVersion(); |
| 440 if (value) { | 470 if (value) { |
| 441 ua_key.WriteValue(chrome_frame_ua_value_name.c_str(), value); | 471 ua_key.WriteValue(chrome_frame_ua_value_name.c_str(), value); |
| 442 } else { | |
| 443 ua_key.DeleteValue(chrome_frame_ua_value_name.c_str()); | |
| 444 } | 472 } |
| 445 hr = S_OK; | 473 hr = S_OK; |
| 446 } else { | 474 } else { |
| 447 DLOG(ERROR) << __FUNCTION__ << ": " << kPostPlatformUAKey; | 475 DLOG(ERROR) << __FUNCTION__ << ": " << kPostPlatformUAKey; |
| 448 hr = E_UNEXPECTED; | 476 hr = E_UNEXPECTED; |
| 449 } | 477 } |
| 450 return hr; | 478 return hr; |
| 451 } | 479 } |
| 452 | 480 |
| 453 enum RegistrationFlags { | 481 enum RegistrationFlags { |
| (...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 788 sd.GetDacl(&new_dacl); | 816 sd.GetDacl(&new_dacl); |
| 789 new_dacl.AddAllowedAce(token_.GetUser(), GENERIC_WRITE | GENERIC_READ); | 817 new_dacl.AddAllowedAce(token_.GetUser(), GENERIC_WRITE | GENERIC_READ); |
| 790 if (AtlSetDacl(object_name.c_str(), SE_REGISTRY_KEY, new_dacl)) { | 818 if (AtlSetDacl(object_name.c_str(), SE_REGISTRY_KEY, new_dacl)) { |
| 791 result = SetOrDeleteMimeHandlerKey(enable, HKEY_LOCAL_MACHINE); | 819 result = SetOrDeleteMimeHandlerKey(enable, HKEY_LOCAL_MACHINE); |
| 792 } | 820 } |
| 793 } | 821 } |
| 794 | 822 |
| 795 backup.RestoreSecurity(object_name.c_str()); | 823 backup.RestoreSecurity(object_name.c_str()); |
| 796 return result; | 824 return result; |
| 797 } | 825 } |
| OLD | NEW |