Chromium Code Reviews| Index: chrome/browser/platform_util_win.cc |
| =================================================================== |
| --- chrome/browser/platform_util_win.cc (revision 168012) |
| +++ chrome/browser/platform_util_win.cc (working copy) |
| @@ -19,6 +19,7 @@ |
| #include "base/win/registry.h" |
| #include "base/win/scoped_co_mem.h" |
| #include "base/win/scoped_comptr.h" |
| +#include "base/win/windows_version.h" |
| #include "content/public/browser/browser_thread.h" |
| #include "googleurl/src/gurl.h" |
| #include "ui/base/win/shell.h" |
| @@ -113,6 +114,21 @@ |
| } |
| } |
| +// Old ShellExecute crashes the process when the command for a given scheme |
| +// is empty. This function tells if it is. |
| +bool ValidateShellCommandForScheme(const std::string& scheme) { |
| + base::win::RegKey key; |
| + std::wstring registry_path = ASCIIToWide(scheme) + |
| + L"\\shell\\open\\command"; |
| + key.Open(HKEY_CLASSES_ROOT, registry_path.c_str(), KEY_READ); |
| + if (!key.Valid()) |
| + return false; |
| + DWORD size = 0; |
| + key.ReadValue(NULL, NULL, &size, NULL); |
| + if (size <= 2) |
| + return false; |
|
darin (slow to review)
2013/01/08 06:00:14
nit: 2 space indent
cpu_(ooo_6.6-7.5)
2013/01/08 19:01:16
Done.
|
| + return true; |
| +} |
| } // namespace |
|
darin (slow to review)
2013/01/08 06:00:14
nit: new line before close of namespace
cpu_(ooo_6.6-7.5)
2013/01/08 19:01:16
Done.
|
| namespace platform_util { |
| @@ -148,20 +164,9 @@ |
| return; |
| } |
| - base::win::RegKey key; |
| - std::wstring registry_path = ASCIIToWide(url.scheme()) + |
| - L"\\shell\\open\\command"; |
| - key.Open(HKEY_CLASSES_ROOT, registry_path.c_str(), KEY_READ); |
| - if (key.Valid()) { |
| - DWORD size = 0; |
| - key.ReadValue(NULL, NULL, &size, NULL); |
| - if (size <= 2) { |
| - // ShellExecute crashes the process when the command is empty. |
| - // We check for "2" because it always returns the trailing NULL. |
| - // TODO(nsylvain): we should also add a dialog to warn on errors. See |
| - // bug 1136923. |
| + if (base::win::GetVersion() < base::win::VERSION_WIN7) { |
|
darin (slow to review)
2013/01/08 06:00:14
Why less than Win7 and not less than Win8? Win7 a
cpu_(ooo_6.6-7.5)
2013/01/08 19:01:16
Yes.
|
| + if (!ValidateShellCommandForScheme(url.scheme())) |
|
jschuh
2013/01/08 04:06:00
I feel like Nicolas should sign off on this one gi
cpu_(ooo_6.6-7.5)
2013/01/08 19:01:16
Ok, I'll ping him.
jschuh
2013/01/08 19:22:37
I'm pretty sure I typed that after you handed me a
|
| return; |
| - } |
| } |
| if (reinterpret_cast<ULONG_PTR>(ShellExecuteA(NULL, "open", |