| Index: chrome_frame/chrome_tab.cc
|
| ===================================================================
|
| --- chrome_frame/chrome_tab.cc (revision 71338)
|
| +++ chrome_frame/chrome_tab.cc (working copy)
|
| @@ -434,13 +434,35 @@
|
| HKEY parent_hive = is_system ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER;
|
|
|
| RegKey ua_key;
|
| - if (ua_key.Create(parent_hive, kPostPlatformUAKey, KEY_WRITE)) {
|
| + if (ua_key.Create(parent_hive, kPostPlatformUAKey, KEY_READ | KEY_WRITE)) {
|
| + // Make sure that we unregister ChromeFrame UA strings registered previously
|
| + wchar_t name[MAX_PATH + 1] = {};
|
| + wchar_t value[MAX_PATH + 1] = {};
|
| +
|
| + DWORD value_index = 0;
|
| + while (value_index < ua_key.ValueCount()) {
|
| + DWORD name_size = arraysize(name);
|
| + DWORD value_size = arraysize(value);
|
| + DWORD type = 0;
|
| + LRESULT ret = ::RegEnumValue(ua_key.Handle(), value_index, name,
|
| + &name_size, NULL, &type,
|
| + reinterpret_cast<BYTE*>(value),
|
| + &value_size);
|
| + if (ret == ERROR_SUCCESS) {
|
| + if (StartsWith(name, kChromeFramePrefix, false)) {
|
| + ua_key.DeleteValue(name);
|
| + } else {
|
| + ++value_index;
|
| + }
|
| + } else {
|
| + break;
|
| + }
|
| + }
|
| +
|
| std::wstring chrome_frame_ua_value_name = kChromeFramePrefix;
|
| chrome_frame_ua_value_name += GetCurrentModuleVersion();
|
| if (value) {
|
| ua_key.WriteValue(chrome_frame_ua_value_name.c_str(), value);
|
| - } else {
|
| - ua_key.DeleteValue(chrome_frame_ua_value_name.c_str());
|
| }
|
| hr = S_OK;
|
| } else {
|
|
|