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/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 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
68 // As a result, stale ProgIDs could be returned, leading to false positives. | 68 // As a result, stale ProgIDs could be returned, leading to false positives. |
69 ShellIntegration::DefaultWebClientState ProbeCurrentDefaultHandlers( | 69 ShellIntegration::DefaultWebClientState ProbeCurrentDefaultHandlers( |
70 const wchar_t* const* protocols, | 70 const wchar_t* const* protocols, |
71 size_t num_protocols) { | 71 size_t num_protocols) { |
72 base::win::ScopedComPtr<IApplicationAssociationRegistration> registration; | 72 base::win::ScopedComPtr<IApplicationAssociationRegistration> registration; |
73 HRESULT hr = registration.CreateInstance( | 73 HRESULT hr = registration.CreateInstance( |
74 CLSID_ApplicationAssociationRegistration, NULL, CLSCTX_INPROC); | 74 CLSID_ApplicationAssociationRegistration, NULL, CLSCTX_INPROC); |
75 if (FAILED(hr)) | 75 if (FAILED(hr)) |
76 return ShellIntegration::UNKNOWN_DEFAULT_WEB_CLIENT; | 76 return ShellIntegration::UNKNOWN_DEFAULT_WEB_CLIENT; |
77 | 77 |
| 78 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); |
| 79 FilePath chrome_exe; |
| 80 if (!PathService::Get(base::FILE_EXE, &chrome_exe)) { |
| 81 NOTREACHED(); |
| 82 return ShellIntegration::UNKNOWN_DEFAULT_WEB_CLIENT; |
| 83 } |
78 string16 prog_id(ShellUtil::kChromeHTMLProgId); | 84 string16 prog_id(ShellUtil::kChromeHTMLProgId); |
79 | 85 prog_id += ShellUtil::GetCurrentInstallationSuffix(dist, chrome_exe.value()); |
80 // If a user specific default browser entry exists, we check for that ProgID | |
81 // being default. If not, then the ProgID is ChromeHTML or ChromiumHTML so we | |
82 // do not append a suffix to the ProgID. | |
83 string16 suffix; | |
84 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); | |
85 if (ShellUtil::GetUserSpecificDefaultBrowserSuffix(dist, &suffix)) | |
86 prog_id += suffix; | |
87 | 86 |
88 for (size_t i = 0; i < num_protocols; ++i) { | 87 for (size_t i = 0; i < num_protocols; ++i) { |
89 base::win::ScopedCoMem<wchar_t> current_app; | 88 base::win::ScopedCoMem<wchar_t> current_app; |
90 hr = registration->QueryCurrentDefault(protocols[i], AT_URLPROTOCOL, | 89 hr = registration->QueryCurrentDefault(protocols[i], AT_URLPROTOCOL, |
91 AL_EFFECTIVE, ¤t_app); | 90 AL_EFFECTIVE, ¤t_app); |
92 if (FAILED(hr) || prog_id.compare(current_app) != 0) | 91 if (FAILED(hr) || prog_id.compare(current_app) != 0) |
93 return ShellIntegration::NOT_DEFAULT_WEB_CLIENT; | 92 return ShellIntegration::NOT_DEFAULT_WEB_CLIENT; |
94 } | 93 } |
95 | 94 |
96 return ShellIntegration::IS_DEFAULT_WEB_CLIENT; | 95 return ShellIntegration::IS_DEFAULT_WEB_CLIENT; |
97 } | 96 } |
98 | 97 |
99 // Probe using IApplicationAssociationRegistration::QueryAppIsDefault (Vista and | 98 // Probe using IApplicationAssociationRegistration::QueryAppIsDefault (Vista and |
100 // Windows 7); see ProbeProtocolHandlers. | 99 // Windows 7); see ProbeProtocolHandlers. |
101 ShellIntegration::DefaultWebClientState ProbeAppIsDefaultHandlers( | 100 ShellIntegration::DefaultWebClientState ProbeAppIsDefaultHandlers( |
102 const wchar_t* const* protocols, | 101 const wchar_t* const* protocols, |
103 size_t num_protocols) { | 102 size_t num_protocols) { |
104 base::win::ScopedComPtr<IApplicationAssociationRegistration> registration; | 103 base::win::ScopedComPtr<IApplicationAssociationRegistration> registration; |
105 HRESULT hr = registration.CreateInstance( | 104 HRESULT hr = registration.CreateInstance( |
106 CLSID_ApplicationAssociationRegistration, NULL, CLSCTX_INPROC); | 105 CLSID_ApplicationAssociationRegistration, NULL, CLSCTX_INPROC); |
107 if (FAILED(hr)) | 106 if (FAILED(hr)) |
108 return ShellIntegration::UNKNOWN_DEFAULT_WEB_CLIENT; | 107 return ShellIntegration::UNKNOWN_DEFAULT_WEB_CLIENT; |
109 | 108 |
110 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); | 109 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); |
| 110 FilePath chrome_exe; |
| 111 if (!PathService::Get(base::FILE_EXE, &chrome_exe)) { |
| 112 NOTREACHED(); |
| 113 return ShellIntegration::UNKNOWN_DEFAULT_WEB_CLIENT; |
| 114 } |
111 string16 app_name(dist->GetApplicationName()); | 115 string16 app_name(dist->GetApplicationName()); |
112 | 116 app_name += ShellUtil::GetCurrentInstallationSuffix(dist, chrome_exe.value()); |
113 // If a user specific default browser entry exists, we check for that | |
114 // app name being default. If not, then default browser is just called | |
115 // Google Chrome or Chromium so we do not append a suffix to the app name. | |
116 string16 suffix; | |
117 if (ShellUtil::GetUserSpecificDefaultBrowserSuffix(dist, &suffix)) | |
118 app_name += suffix; | |
119 | 117 |
120 BOOL result; | 118 BOOL result; |
121 for (size_t i = 0; i < num_protocols; ++i) { | 119 for (size_t i = 0; i < num_protocols; ++i) { |
122 result = TRUE; | 120 result = TRUE; |
123 hr = registration->QueryAppIsDefault(protocols[i], AT_URLPROTOCOL, | 121 hr = registration->QueryAppIsDefault(protocols[i], AT_URLPROTOCOL, |
124 AL_EFFECTIVE, app_name.c_str(), &result); | 122 AL_EFFECTIVE, app_name.c_str(), &result); |
125 if (FAILED(hr) || result == FALSE) | 123 if (FAILED(hr) || result == FALSE) |
126 return ShellIntegration::NOT_DEFAULT_WEB_CLIENT; | 124 return ShellIntegration::NOT_DEFAULT_WEB_CLIENT; |
127 } | 125 } |
128 | 126 |
(...skipping 467 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
596 BrowserThread::PostTask( | 594 BrowserThread::PostTask( |
597 BrowserThread::FILE, FROM_HERE, | 595 BrowserThread::FILE, FROM_HERE, |
598 base::Bind(&MigrateChromiumShortcutsCallback)); | 596 base::Bind(&MigrateChromiumShortcutsCallback)); |
599 } | 597 } |
600 | 598 |
601 bool ShellIntegration::ActivateMetroChrome() { | 599 bool ShellIntegration::ActivateMetroChrome() { |
602 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); | 600 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); |
603 const string16 app_id(dist->GetBrowserAppId()); | 601 const string16 app_id(dist->GetBrowserAppId()); |
604 return ActivateApplication(app_id); | 602 return ActivateApplication(app_id); |
605 } | 603 } |
OLD | NEW |