Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3498)

Unified Diff: chrome/browser/web_applications/web_app_mac.mm

Issue 2703283005: Destroy web_app::ShortcutInfo on UI thread (Closed)
Patch Set: +TestBrowserThreadBundle Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/web_applications/web_app_mac.mm
diff --git a/chrome/browser/web_applications/web_app_mac.mm b/chrome/browser/web_applications/web_app_mac.mm
index 1c467079d783e9788d418d0471d413cfa1770edc..6da77194e295239a9fa181c7918609165cfcc9a0 100644
--- a/chrome/browser/web_applications/web_app_mac.mm
+++ b/chrome/browser/web_applications/web_app_mac.mm
@@ -214,11 +214,10 @@ bool HasSameUserDataDir(const base::FilePath& bundle_path) {
user_data_dir.value(), base::CompareCase::SENSITIVE);
}
-void LaunchShimOnFileThread(
- std::unique_ptr<web_app::ShortcutInfo> shortcut_info,
- bool launched_after_rebuild) {
+void LaunchShimOnFileThread(const web_app::ShortcutInfo& shortcut_info,
+ bool launched_after_rebuild) {
DCHECK_CURRENTLY_ON(content::BrowserThread::FILE);
- base::FilePath shim_path = web_app::GetAppInstallPath(*shortcut_info);
+ base::FilePath shim_path = web_app::GetAppInstallPath(shortcut_info);
if (shim_path.empty() ||
!base::PathExists(shim_path) ||
@@ -226,7 +225,7 @@ void LaunchShimOnFileThread(
// The user may have deleted the copy in the Applications folder, use the
// one in the web app's |app_data_dir_|.
base::FilePath app_data_dir = web_app::GetWebAppDataDirectory(
- shortcut_info->profile_path, shortcut_info->extension_id, GURL());
+ shortcut_info.profile_path, shortcut_info.extension_id, GURL());
shim_path = app_data_dir.Append(shim_path.BaseName());
}
@@ -266,18 +265,22 @@ void UpdatePlatformShortcutsInternal(
}
void UpdateAndLaunchShimOnFileThread(
- std::unique_ptr<web_app::ShortcutInfo> shortcut_info) {
+ const web_app::ShortcutInfo& shortcut_info) {
base::FilePath shortcut_data_dir = web_app::GetWebAppDataDirectory(
- shortcut_info->profile_path, shortcut_info->extension_id, GURL());
+ shortcut_info.profile_path, shortcut_info.extension_id, GURL());
UpdatePlatformShortcutsInternal(shortcut_data_dir, base::string16(),
- *shortcut_info);
- LaunchShimOnFileThread(std::move(shortcut_info), true);
+ shortcut_info);
+ LaunchShimOnFileThread(shortcut_info, true);
}
void UpdateAndLaunchShim(std::unique_ptr<web_app::ShortcutInfo> shortcut_info) {
- content::BrowserThread::PostTask(content::BrowserThread::FILE, FROM_HERE,
- base::Bind(&UpdateAndLaunchShimOnFileThread,
- base::Passed(&shortcut_info)));
+ const web_app::ShortcutInfo& shortcut_info_ref = *shortcut_info;
+ content::BrowserThread::PostTaskAndReply(
+ content::BrowserThread::FILE, FROM_HERE,
+ base::Bind(&UpdateAndLaunchShimOnFileThread,
+ base::ConstRef(shortcut_info_ref)),
+ base::Bind(&web_app::internals::DeleteShortcutInfoOnUIThread,
+ base::Passed(&shortcut_info), base::Closure()));
}
void RebuildAppAndLaunch(std::unique_ptr<web_app::ShortcutInfo> shortcut_info) {
@@ -526,10 +529,9 @@ std::unique_ptr<web_app::ShortcutInfo> RecordAppShimErrorAndBuildShortcutInfo(
}
void RevealAppShimInFinderForAppOnFileThread(
- std::unique_ptr<web_app::ShortcutInfo> shortcut_info,
+ const web_app::ShortcutInfo& shortcut_info,
const base::FilePath& app_path) {
- web_app::WebAppShortcutCreator shortcut_creator(app_path,
- shortcut_info.get());
+ web_app::WebAppShortcutCreator shortcut_creator(app_path, &shortcut_info);
shortcut_creator.RevealAppShimInFinder();
}
@@ -977,9 +979,13 @@ void MaybeLaunchShortcut(std::unique_ptr<ShortcutInfo> shortcut_info) {
return;
}
- content::BrowserThread::PostTask(
+ const web_app::ShortcutInfo& shortcut_info_ref = *shortcut_info;
+ content::BrowserThread::PostTaskAndReply(
content::BrowserThread::FILE, FROM_HERE,
- base::Bind(&LaunchShimOnFileThread, base::Passed(&shortcut_info), false));
+ base::Bind(&LaunchShimOnFileThread, base::ConstRef(shortcut_info_ref),
+ false),
+ base::Bind(&web_app::internals::DeleteShortcutInfoOnUIThread,
+ base::Passed(&shortcut_info), base::Closure()));
}
bool MaybeRebuildShortcut(const base::CommandLine& command_line) {
@@ -1022,38 +1028,40 @@ void RevealAppShimInFinderForApp(Profile* profile,
const extensions::Extension* app) {
std::unique_ptr<web_app::ShortcutInfo> shortcut_info =
ShortcutInfoForExtensionAndProfile(app, profile);
- content::BrowserThread::PostTask(
+ const web_app::ShortcutInfo& shortcut_info_ref = *shortcut_info;
+ content::BrowserThread::PostTaskAndReply(
content::BrowserThread::FILE, FROM_HERE,
base::Bind(&RevealAppShimInFinderForAppOnFileThread,
- base::Passed(&shortcut_info), app->path()));
+ base::ConstRef(shortcut_info_ref), app->path()),
+ base::Bind(&web_app::internals::DeleteShortcutInfoOnUIThread,
+ base::Passed(&shortcut_info), base::Closure()));
}
namespace internals {
-bool CreatePlatformShortcuts(
- const base::FilePath& app_data_path,
- std::unique_ptr<ShortcutInfo> shortcut_info,
- const ShortcutLocations& creation_locations,
- ShortcutCreationReason creation_reason) {
+bool CreatePlatformShortcuts(const base::FilePath& app_data_path,
+ const ShortcutInfo& shortcut_info,
+ const ShortcutLocations& creation_locations,
+ ShortcutCreationReason creation_reason) {
DCHECK_CURRENTLY_ON(content::BrowserThread::FILE);
if (AppShimsDisabledForTest())
return true;
- WebAppShortcutCreator shortcut_creator(app_data_path, shortcut_info.get());
+ WebAppShortcutCreator shortcut_creator(app_data_path, &shortcut_info);
return shortcut_creator.CreateShortcuts(creation_reason, creation_locations);
}
void DeletePlatformShortcuts(const base::FilePath& app_data_path,
- std::unique_ptr<ShortcutInfo> shortcut_info) {
+ const ShortcutInfo& shortcut_info) {
DCHECK_CURRENTLY_ON(content::BrowserThread::FILE);
- WebAppShortcutCreator shortcut_creator(app_data_path, shortcut_info.get());
+ WebAppShortcutCreator shortcut_creator(app_data_path, &shortcut_info);
shortcut_creator.DeleteShortcuts();
}
void UpdatePlatformShortcuts(const base::FilePath& app_data_path,
const base::string16& old_app_title,
- std::unique_ptr<ShortcutInfo> shortcut_info) {
- UpdatePlatformShortcutsInternal(app_data_path, old_app_title, *shortcut_info);
+ const ShortcutInfo& shortcut_info) {
+ UpdatePlatformShortcutsInternal(app_data_path, old_app_title, shortcut_info);
}
void DeleteAllShortcutsForProfile(const base::FilePath& profile_path) {
« no previous file with comments | « chrome/browser/web_applications/web_app_linux.cc ('k') | chrome/browser/web_applications/web_app_mac_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698