| 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 #include "chrome/browser/shell_integration.h" | 5 #include "chrome/browser/shell_integration.h" |
| 6 | 6 |
| 7 #include <windows.h> | 7 #include <windows.h> |
| 8 #include <shobjidl.h> | 8 #include <shobjidl.h> |
| 9 #include <propkey.h> | 9 #include <propkey.h> |
| 10 #include <propvarutil.h> | 10 #include <propvarutil.h> |
| (...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 339 | 339 |
| 340 // open command for protocol associations | 340 // open command for protocol associations |
| 341 for (int i = 0; i < _countof(kChromeProtocols); i++) { | 341 for (int i = 0; i < _countof(kChromeProtocols); i++) { |
| 342 // Check in HKEY_CLASSES_ROOT that is the result of merge between | 342 // Check in HKEY_CLASSES_ROOT that is the result of merge between |
| 343 // HKLM and HKCU | 343 // HKLM and HKCU |
| 344 HKEY root_key = HKEY_CLASSES_ROOT; | 344 HKEY root_key = HKEY_CLASSES_ROOT; |
| 345 // Check <protocol>\shell\open\command | 345 // Check <protocol>\shell\open\command |
| 346 std::wstring key_path(kChromeProtocols[i] + ShellUtil::kRegShellOpen); | 346 std::wstring key_path(kChromeProtocols[i] + ShellUtil::kRegShellOpen); |
| 347 base::win::RegKey key(root_key, key_path.c_str(), KEY_READ); | 347 base::win::RegKey key(root_key, key_path.c_str(), KEY_READ); |
| 348 std::wstring value; | 348 std::wstring value; |
| 349 if (!key.Valid() || !key.ReadValue(L"", &value)) | 349 if (!key.Valid() || (key.ReadValue(L"", &value) != ERROR_SUCCESS)) |
| 350 return NOT_DEFAULT_BROWSER; | 350 return NOT_DEFAULT_BROWSER; |
| 351 // Need to normalize path in case it's been munged. | 351 // Need to normalize path in case it's been munged. |
| 352 CommandLine command_line = CommandLine::FromString(value); | 352 CommandLine command_line = CommandLine::FromString(value); |
| 353 std::wstring short_path; | 353 std::wstring short_path; |
| 354 GetShortPathName(command_line.GetProgram().value().c_str(), | 354 GetShortPathName(command_line.GetProgram().value().c_str(), |
| 355 WriteInto(&short_path, MAX_PATH), MAX_PATH); | 355 WriteInto(&short_path, MAX_PATH), MAX_PATH); |
| 356 if (!FilePath::CompareEqualIgnoreCase(short_path, short_app_path)) | 356 if (!FilePath::CompareEqualIgnoreCase(short_path, short_app_path)) |
| 357 return NOT_DEFAULT_BROWSER; | 357 return NOT_DEFAULT_BROWSER; |
| 358 } | 358 } |
| 359 } | 359 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 370 // This method checks if Firefox is defualt browser by checking these | 370 // This method checks if Firefox is defualt browser by checking these |
| 371 // locations and returns true if Firefox traces are found there. In case of | 371 // locations and returns true if Firefox traces are found there. In case of |
| 372 // error (or if Firefox is not found)it returns the default value which | 372 // error (or if Firefox is not found)it returns the default value which |
| 373 // is false. | 373 // is false. |
| 374 bool ShellIntegration::IsFirefoxDefaultBrowser() { | 374 bool ShellIntegration::IsFirefoxDefaultBrowser() { |
| 375 bool ff_default = false; | 375 bool ff_default = false; |
| 376 if (base::win::GetVersion() >= base::win::VERSION_VISTA) { | 376 if (base::win::GetVersion() >= base::win::VERSION_VISTA) { |
| 377 std::wstring app_cmd; | 377 std::wstring app_cmd; |
| 378 base::win::RegKey key(HKEY_CURRENT_USER, | 378 base::win::RegKey key(HKEY_CURRENT_USER, |
| 379 ShellUtil::kRegVistaUrlPrefs, KEY_READ); | 379 ShellUtil::kRegVistaUrlPrefs, KEY_READ); |
| 380 if (key.Valid() && key.ReadValue(L"Progid", &app_cmd) && | 380 if (key.Valid() && (key.ReadValue(L"Progid", &app_cmd) == ERROR_SUCCESS) && |
| 381 app_cmd == L"FirefoxURL") | 381 app_cmd == L"FirefoxURL") |
| 382 ff_default = true; | 382 ff_default = true; |
| 383 } else { | 383 } else { |
| 384 std::wstring key_path(L"http"); | 384 std::wstring key_path(L"http"); |
| 385 key_path.append(ShellUtil::kRegShellOpen); | 385 key_path.append(ShellUtil::kRegShellOpen); |
| 386 base::win::RegKey key(HKEY_CLASSES_ROOT, key_path.c_str(), KEY_READ); | 386 base::win::RegKey key(HKEY_CLASSES_ROOT, key_path.c_str(), KEY_READ); |
| 387 std::wstring app_cmd; | 387 std::wstring app_cmd; |
| 388 if (key.Valid() && key.ReadValue(L"", &app_cmd) && | 388 if (key.Valid() && (key.ReadValue(L"", &app_cmd) == ERROR_SUCCESS) && |
| 389 std::wstring::npos != StringToLowerASCII(app_cmd).find(L"firefox")) | 389 std::wstring::npos != StringToLowerASCII(app_cmd).find(L"firefox")) |
| 390 ff_default = true; | 390 ff_default = true; |
| 391 } | 391 } |
| 392 return ff_default; | 392 return ff_default; |
| 393 } | 393 } |
| 394 | 394 |
| 395 std::wstring ShellIntegration::GetAppId(const std::wstring& app_name, | 395 std::wstring ShellIntegration::GetAppId(const std::wstring& app_name, |
| 396 const FilePath& profile_path) { | 396 const FilePath& profile_path) { |
| 397 std::wstring app_id(app_name); | 397 std::wstring app_id(app_name); |
| 398 | 398 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 412 profile_path); | 412 profile_path); |
| 413 } | 413 } |
| 414 | 414 |
| 415 void ShellIntegration::MigrateChromiumShortcuts() { | 415 void ShellIntegration::MigrateChromiumShortcuts() { |
| 416 if (base::win::GetVersion() < base::win::VERSION_WIN7) | 416 if (base::win::GetVersion() < base::win::VERSION_WIN7) |
| 417 return; | 417 return; |
| 418 | 418 |
| 419 BrowserThread::PostTask( | 419 BrowserThread::PostTask( |
| 420 BrowserThread::FILE, FROM_HERE, new MigrateChromiumShortcutsTask()); | 420 BrowserThread::FILE, FROM_HERE, new MigrateChromiumShortcutsTask()); |
| 421 } | 421 } |
| OLD | NEW |