| 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 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 string16 prog_id(ShellUtil::kChromeHTMLProgId); | 78 string16 prog_id(ShellUtil::kChromeHTMLProgId); |
| 79 | 79 prog_id += ShellUtil::GetCurrentInstallationSuffix(); |
| 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 | 80 |
| 88 for (size_t i = 0; i < num_protocols; ++i) { | 81 for (size_t i = 0; i < num_protocols; ++i) { |
| 89 base::win::ScopedCoMem<wchar_t> current_app; | 82 base::win::ScopedCoMem<wchar_t> current_app; |
| 90 hr = registration->QueryCurrentDefault(protocols[i], AT_URLPROTOCOL, | 83 hr = registration->QueryCurrentDefault(protocols[i], AT_URLPROTOCOL, |
| 91 AL_EFFECTIVE, ¤t_app); | 84 AL_EFFECTIVE, ¤t_app); |
| 92 if (FAILED(hr) || prog_id.compare(current_app) != 0) | 85 if (FAILED(hr) || prog_id.compare(current_app) != 0) |
| 93 return ShellIntegration::NOT_DEFAULT_WEB_CLIENT; | 86 return ShellIntegration::NOT_DEFAULT_WEB_CLIENT; |
| 94 } | 87 } |
| 95 | 88 |
| 96 return ShellIntegration::IS_DEFAULT_WEB_CLIENT; | 89 return ShellIntegration::IS_DEFAULT_WEB_CLIENT; |
| 97 } | 90 } |
| 98 | 91 |
| 99 // Probe using IApplicationAssociationRegistration::QueryAppIsDefault (Vista and | 92 // Probe using IApplicationAssociationRegistration::QueryAppIsDefault (Vista and |
| 100 // Windows 7); see ProbeProtocolHandlers. | 93 // Windows 7); see ProbeProtocolHandlers. |
| 101 ShellIntegration::DefaultWebClientState ProbeAppIsDefaultHandlers( | 94 ShellIntegration::DefaultWebClientState ProbeAppIsDefaultHandlers( |
| 102 const wchar_t* const* protocols, | 95 const wchar_t* const* protocols, |
| 103 size_t num_protocols) { | 96 size_t num_protocols) { |
| 104 base::win::ScopedComPtr<IApplicationAssociationRegistration> registration; | 97 base::win::ScopedComPtr<IApplicationAssociationRegistration> registration; |
| 105 HRESULT hr = registration.CreateInstance( | 98 HRESULT hr = registration.CreateInstance( |
| 106 CLSID_ApplicationAssociationRegistration, NULL, CLSCTX_INPROC); | 99 CLSID_ApplicationAssociationRegistration, NULL, CLSCTX_INPROC); |
| 107 if (FAILED(hr)) | 100 if (FAILED(hr)) |
| 108 return ShellIntegration::UNKNOWN_DEFAULT_WEB_CLIENT; | 101 return ShellIntegration::UNKNOWN_DEFAULT_WEB_CLIENT; |
| 109 | 102 |
| 110 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); | 103 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); |
| 111 string16 app_name(dist->GetApplicationName()); | 104 string16 app_name(dist->GetApplicationName()); |
| 112 | 105 app_name += ShellUtil::GetCurrentInstallationSuffix(); |
| 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 | 106 |
| 120 BOOL result; | 107 BOOL result; |
| 121 for (size_t i = 0; i < num_protocols; ++i) { | 108 for (size_t i = 0; i < num_protocols; ++i) { |
| 122 result = TRUE; | 109 result = TRUE; |
| 123 hr = registration->QueryAppIsDefault(protocols[i], AT_URLPROTOCOL, | 110 hr = registration->QueryAppIsDefault(protocols[i], AT_URLPROTOCOL, |
| 124 AL_EFFECTIVE, app_name.c_str(), &result); | 111 AL_EFFECTIVE, app_name.c_str(), &result); |
| 125 if (FAILED(hr) || result == FALSE) | 112 if (FAILED(hr) || result == FALSE) |
| 126 return ShellIntegration::NOT_DEFAULT_WEB_CLIENT; | 113 return ShellIntegration::NOT_DEFAULT_WEB_CLIENT; |
| 127 } | 114 } |
| 128 | 115 |
| (...skipping 443 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 572 BrowserThread::PostTask( | 559 BrowserThread::PostTask( |
| 573 BrowserThread::FILE, FROM_HERE, | 560 BrowserThread::FILE, FROM_HERE, |
| 574 base::Bind(&MigrateChromiumShortcutsCallback)); | 561 base::Bind(&MigrateChromiumShortcutsCallback)); |
| 575 } | 562 } |
| 576 | 563 |
| 577 bool ShellIntegration::ActivateMetroChrome() { | 564 bool ShellIntegration::ActivateMetroChrome() { |
| 578 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); | 565 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); |
| 579 const string16 app_id(dist->GetBrowserAppId()); | 566 const string16 app_id(dist->GetBrowserAppId()); |
| 580 return ActivateApplication(app_id); | 567 return ActivateApplication(app_id); |
| 581 } | 568 } |
| OLD | NEW |