diff options
author | sail@chromium.org <sail@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-11 02:04:13 +0000 |
---|---|---|
committer | sail@chromium.org <sail@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-11 02:04:13 +0000 |
commit | b6b72227799d289f829a164265568c834e0b0aa7 (patch) | |
tree | 7afd9b517fe9313df5c103b333d4ea12bc546fbc /chrome/browser/shell_integration_win.cc | |
parent | aec6dc05d918328bac097bc8e0c9c02241fb1a07 (diff) | |
download | chromium_src-b6b72227799d289f829a164265568c834e0b0aa7.zip chromium_src-b6b72227799d289f829a164265568c834e0b0aa7.tar.gz chromium_src-b6b72227799d289f829a164265568c834e0b0aa7.tar.bz2 |
Publish app shortcuts on Mac
With this CL when installing a platform app we do the following
- copy the stub App Mode Loader.app bundle to a tmp folder with the correct app name
- update the info plist
- copy the final app to /Applications
- if we don't have write permission to /Application then we copy the app to ~/Application instead
Note, for now I'm putting this feature behind a --enable-platform-apps flag.
BUG=112651
TEST=
Review URL: http://codereview.chromium.org/9346013
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@121613 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/shell_integration_win.cc')
-rw-r--r-- | chrome/browser/shell_integration_win.cc | 78 |
1 files changed, 39 insertions, 39 deletions
diff --git a/chrome/browser/shell_integration_win.cc b/chrome/browser/shell_integration_win.cc index 762cfa6..0aa9d94 100644 --- a/chrome/browser/shell_integration_win.cc +++ b/chrome/browser/shell_integration_win.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -43,10 +43,10 @@ namespace { // Helper function for ShellIntegration::GetAppId to generates profile id // from profile path. "profile_id" is composed of sanitized basenames of // user data dir and profile dir joined by a ".". -std::wstring GetProfileIdFromPath(const FilePath& profile_path) { +string16 GetProfileIdFromPath(const FilePath& profile_path) { // Return empty string if profile_path is empty if (profile_path.empty()) - return std::wstring(); + return string16(); FilePath default_user_data_dir; // Return empty string if profile_path is in default user data @@ -55,14 +55,14 @@ std::wstring GetProfileIdFromPath(const FilePath& profile_path) { profile_path.DirName() == default_user_data_dir && profile_path.BaseName().value() == ASCIIToUTF16(chrome::kInitialProfile)) { - return std::wstring(); + return string16(); } // Get joined basenames of user data dir and profile. - std::wstring basenames = profile_path.DirName().BaseName().value() + + string16 basenames = profile_path.DirName().BaseName().value() + L"." + profile_path.BaseName().value(); - std::wstring profile_id; + string16 profile_id; profile_id.reserve(basenames.size()); // Generate profile_id from sanitized basenames. @@ -76,7 +76,7 @@ std::wstring GetProfileIdFromPath(const FilePath& profile_path) { return profile_id; } -bool GetShortcutAppId(IShellLink* shell_link, std::wstring* app_id) { +bool GetShortcutAppId(IShellLink* shell_link, string16* app_id) { DCHECK(shell_link); DCHECK(app_id); @@ -102,20 +102,20 @@ bool GetShortcutAppId(IShellLink* shell_link, std::wstring* app_id) { // points to chrome and expected app id is successfully derived. bool GetExpectedAppId(const FilePath& chrome_exe, IShellLink* shell_link, - std::wstring* expected_app_id) { + string16* expected_app_id) { DCHECK(shell_link); DCHECK(expected_app_id); expected_app_id->clear(); // Check if the shortcut points to chrome_exe. - std::wstring source; + string16 source; if (FAILED(shell_link->GetPath(WriteInto(&source, MAX_PATH), MAX_PATH, NULL, SLGP_RAWPATH)) || lstrcmpi(chrome_exe.value().c_str(), source.c_str())) return false; - std::wstring arguments; + string16 arguments; if (FAILED(shell_link->GetArguments(WriteInto(&arguments, MAX_PATH), MAX_PATH))) return false; @@ -131,12 +131,12 @@ bool GetExpectedAppId(const FilePath& chrome_exe, chrome::kInitialProfile); } - std::wstring app_name; + string16 app_name; if (command_line.HasSwitch(switches::kApp)) { - app_name = UTF8ToWide(web_app::GenerateApplicationNameFromURL( + app_name = UTF8ToUTF16(web_app::GenerateApplicationNameFromURL( GURL(command_line.GetSwitchValueASCII(switches::kApp)))); } else if (command_line.HasSwitch(switches::kAppId)) { - app_name = UTF8ToWide(web_app::GenerateApplicationNameFromExtensionId( + app_name = UTF8ToUTF16(web_app::GenerateApplicationNameFromExtensionId( command_line.GetSwitchValueASCII(switches::kAppId))); } else { app_name = BrowserDistribution::GetDistribution()->GetBrowserAppId(); @@ -171,13 +171,13 @@ void MigrateWin7ShortcutsInPath( } // Get expected app id from shortcut. - std::wstring expected_app_id; + string16 expected_app_id; if (!GetExpectedAppId(chrome_exe, shell_link, &expected_app_id) || expected_app_id.empty()) continue; // Get existing app id from shortcut if any. - std::wstring existing_app_id; + string16 existing_app_id; GetShortcutAppId(shell_link, &existing_app_id); if (expected_app_id != existing_app_id) { @@ -265,7 +265,7 @@ bool ShellIntegration::SetAsDefaultProtocolClient(const std::string& protocol) { return false; } - std::wstring wprotocol = UTF8ToWide(protocol); + string16 wprotocol = UTF8ToUTF16(protocol); BrowserDistribution* dist = BrowserDistribution::GetDistribution(); if (!ShellUtil::MakeChromeDefaultProtocolClient(dist, chrome_exe.value(), wprotocol)) { @@ -295,7 +295,7 @@ ShellIntegration::DefaultWebClientState ShellIntegration::IsDefaultBrowser() { // re-run the installer or run with the --set-default-browser command line // flag. There is doubtless some other key we can hook into to cause "Repair" // to show up in Add/Remove programs for us. - const std::wstring kChromeProtocols[] = {L"http", L"https"}; + const string16 kChromeProtocols[] = {L"http", L"https"}; if (base::win::GetVersion() >= base::win::VERSION_VISTA) { base::win::ScopedComPtr<IApplicationAssociationRegistration> pAAR; @@ -305,11 +305,11 @@ ShellIntegration::DefaultWebClientState ShellIntegration::IsDefaultBrowser() { return NOT_DEFAULT_WEB_CLIENT; BrowserDistribution* dist = BrowserDistribution::GetDistribution(); - std::wstring app_name = dist->GetApplicationName(); + string16 app_name = dist->GetApplicationName(); // If a user specific default browser entry exists, we check for that // app name being default. If not, then default browser is just called // Google Chrome or Chromium so we do not append suffix to app name. - std::wstring suffix; + string16 suffix; if (ShellUtil::GetUserSpecificDefaultBrowserSuffix(dist, &suffix)) app_name += suffix; @@ -322,7 +322,7 @@ ShellIntegration::DefaultWebClientState ShellIntegration::IsDefaultBrowser() { } } } else { - std::wstring short_app_path; + string16 short_app_path; DWORD get_path_result = GetShortPathName(app_path.value().c_str(), WriteInto(&short_app_path, MAX_PATH), MAX_PATH); if (!get_path_result || get_path_result > MAX_PATH) { @@ -336,14 +336,14 @@ ShellIntegration::DefaultWebClientState ShellIntegration::IsDefaultBrowser() { // HKLM and HKCU HKEY root_key = HKEY_CLASSES_ROOT; // Check <protocol>\shell\open\command - std::wstring key_path(kChromeProtocols[i] + ShellUtil::kRegShellOpen); + string16 key_path(kChromeProtocols[i] + ShellUtil::kRegShellOpen); base::win::RegKey key(root_key, key_path.c_str(), KEY_READ); - std::wstring value; + string16 value; if (!key.Valid() || (key.ReadValue(L"", &value) != ERROR_SUCCESS)) return NOT_DEFAULT_WEB_CLIENT; // Need to normalize path in case it's been munged. CommandLine command_line = CommandLine::FromString(value); - std::wstring short_path; + string16 short_path; get_path_result = GetShortPathName( command_line.GetProgram().value().c_str(), WriteInto(&short_path, MAX_PATH), MAX_PATH); @@ -371,7 +371,7 @@ ShellIntegration::DefaultWebClientState return UNKNOWN_DEFAULT_WEB_CLIENT; } - std::wstring wprotocol = UTF8ToWide(protocol); + string16 wprotocol = UTF8ToUTF16(protocol); if (base::win::GetVersion() >= base::win::VERSION_VISTA) { base::win::ScopedComPtr<IApplicationAssociationRegistration> pAAR; @@ -381,11 +381,11 @@ ShellIntegration::DefaultWebClientState return NOT_DEFAULT_WEB_CLIENT; BrowserDistribution* dist = BrowserDistribution::GetDistribution(); - std::wstring app_name = dist->GetApplicationName(); + string16 app_name = dist->GetApplicationName(); // If a user specific default browser entry exists, we check for that // app name being default. If not, then default browser is just called // Google Chrome or Chromium so we do not append suffix to app name. - std::wstring suffix; + string16 suffix; if (ShellUtil::GetUserSpecificDefaultBrowserSuffix(dist, &suffix)) app_name += suffix; @@ -396,7 +396,7 @@ ShellIntegration::DefaultWebClientState return NOT_DEFAULT_WEB_CLIENT; } } else { - std::wstring short_app_path; + string16 short_app_path; DWORD get_path_result = GetShortPathName(app_path.value().c_str(), WriteInto(&short_app_path, MAX_PATH), MAX_PATH); if (!get_path_result || get_path_result > MAX_PATH) { @@ -409,14 +409,14 @@ ShellIntegration::DefaultWebClientState // HKLM and HKCU HKEY root_key = HKEY_CLASSES_ROOT; // Check <protocol>\shell\open\command - std::wstring key_path(wprotocol + ShellUtil::kRegShellOpen); + string16 key_path(wprotocol + ShellUtil::kRegShellOpen); base::win::RegKey key(root_key, key_path.c_str(), KEY_READ); - std::wstring value; + string16 value; if (!key.Valid() || (key.ReadValue(L"", &value) != ERROR_SUCCESS)) return NOT_DEFAULT_WEB_CLIENT; // Need to normalize path in case it's been munged. CommandLine command_line = CommandLine::FromString(value); - std::wstring short_path; + string16 short_path; get_path_result = GetShortPathName( command_line.GetProgram().value().c_str(), WriteInto(&short_path, MAX_PATH), MAX_PATH); @@ -444,29 +444,29 @@ ShellIntegration::DefaultWebClientState bool ShellIntegration::IsFirefoxDefaultBrowser() { bool ff_default = false; if (base::win::GetVersion() >= base::win::VERSION_VISTA) { - std::wstring app_cmd; + string16 app_cmd; base::win::RegKey key(HKEY_CURRENT_USER, ShellUtil::kRegVistaUrlPrefs, KEY_READ); if (key.Valid() && (key.ReadValue(L"Progid", &app_cmd) == ERROR_SUCCESS) && app_cmd == L"FirefoxURL") ff_default = true; } else { - std::wstring key_path(L"http"); + string16 key_path(L"http"); key_path.append(ShellUtil::kRegShellOpen); base::win::RegKey key(HKEY_CLASSES_ROOT, key_path.c_str(), KEY_READ); - std::wstring app_cmd; + string16 app_cmd; if (key.Valid() && (key.ReadValue(L"", &app_cmd) == ERROR_SUCCESS) && - std::wstring::npos != StringToLowerASCII(app_cmd).find(L"firefox")) + string16::npos != StringToLowerASCII(app_cmd).find(L"firefox")) ff_default = true; } return ff_default; } -std::wstring ShellIntegration::GetAppId(const std::wstring& app_name, - const FilePath& profile_path) { - std::wstring app_id(app_name); +string16 ShellIntegration::GetAppId(const string16& app_name, + const FilePath& profile_path) { + string16 app_id(app_name); - std::wstring profile_id(GetProfileIdFromPath(profile_path)); + string16 profile_id(GetProfileIdFromPath(profile_path)); if (!profile_id.empty()) { app_id += L"."; app_id += profile_id; @@ -477,7 +477,7 @@ std::wstring ShellIntegration::GetAppId(const std::wstring& app_name, return app_id; } -std::wstring ShellIntegration::GetChromiumAppId(const FilePath& profile_path) { +string16 ShellIntegration::GetChromiumAppId(const FilePath& profile_path) { return GetAppId(BrowserDistribution::GetDistribution()->GetBrowserAppId(), profile_path); } |