| Index: chrome/browser/web_applications/web_app.cc
|
| diff --git a/chrome/browser/web_applications/web_app.cc b/chrome/browser/web_applications/web_app.cc
|
| index d0da8543b40f3381214cef41238a0f50b9bd3003..298dcb96d7df2401bce8fa3b9077f16b3cd1ad5f 100644
|
| --- a/chrome/browser/web_applications/web_app.cc
|
| +++ b/chrome/browser/web_applications/web_app.cc
|
| @@ -90,15 +90,14 @@ void UpdateAllShortcutsForShortcutInfo(
|
| const base::Closure& callback,
|
| std::unique_ptr<web_app::ShortcutInfo> shortcut_info) {
|
| base::FilePath shortcut_data_dir = GetShortcutDataDir(*shortcut_info);
|
| - base::Closure task = base::Bind(&web_app::internals::UpdatePlatformShortcuts,
|
| - shortcut_data_dir, old_app_title,
|
| - base::Passed(&shortcut_info));
|
| - if (callback.is_null()) {
|
| - BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, task);
|
| - } else {
|
| - BrowserThread::PostTaskAndReply(BrowserThread::FILE, FROM_HERE, task,
|
| - callback);
|
| - }
|
| + const web_app::ShortcutInfo& shortcut_info_ref = *shortcut_info;
|
| + BrowserThread::PostTaskAndReply(
|
| + BrowserThread::FILE, FROM_HERE,
|
| + base::Bind(&web_app::internals::UpdatePlatformShortcuts,
|
| + shortcut_data_dir, old_app_title,
|
| + base::ConstRef(shortcut_info_ref)),
|
| + base::Bind(&web_app::internals::DeleteShortcutInfoOnUIThread,
|
| + base::Passed(&shortcut_info), callback));
|
| }
|
|
|
| void OnImageLoaded(std::unique_ptr<web_app::ShortcutInfo> shortcut_info,
|
| @@ -130,11 +129,16 @@ void ScheduleCreatePlatformShortcut(
|
| const web_app::ShortcutLocations& locations,
|
| std::unique_ptr<web_app::ShortcutInfo> shortcut_info) {
|
| base::FilePath shortcut_data_dir = GetShortcutDataDir(*shortcut_info);
|
| - BrowserThread::PostTask(
|
| +
|
| + const web_app::ShortcutInfo& shortcut_info_ref = *shortcut_info;
|
| + BrowserThread::PostTaskAndReply(
|
| BrowserThread::FILE, FROM_HERE,
|
| base::Bind(
|
| base::IgnoreResult(&web_app::internals::CreatePlatformShortcuts),
|
| - shortcut_data_dir, base::Passed(&shortcut_info), locations, reason));
|
| + shortcut_data_dir, base::ConstRef(shortcut_info_ref), locations,
|
| + reason),
|
| + base::Bind(&web_app::internals::DeleteShortcutInfoOnUIThread,
|
| + base::Passed(&shortcut_info), base::Closure()));
|
| }
|
|
|
| } // namespace
|
| @@ -161,10 +165,21 @@ base::FilePath GetSanitizedFileName(const base::string16& name) {
|
| return base::FilePath(file_name);
|
| }
|
|
|
| +void DeleteShortcutInfoOnUIThread(
|
| + std::unique_ptr<web_app::ShortcutInfo> shortcut_info,
|
| + const base::Closure& callback) {
|
| + shortcut_info.reset();
|
| + if (callback)
|
| + callback.Run();
|
| +}
|
| +
|
| } // namespace internals
|
|
|
| ShortcutInfo::ShortcutInfo() {}
|
| -ShortcutInfo::~ShortcutInfo() {}
|
| +
|
| +ShortcutInfo::~ShortcutInfo() {
|
| + DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
| +}
|
|
|
| ShortcutLocations::ShortcutLocations()
|
| : on_desktop(false),
|
| @@ -430,10 +445,14 @@ void DeleteAllShortcuts(Profile* profile, const extensions::Extension* app) {
|
| std::unique_ptr<ShortcutInfo> shortcut_info(
|
| ShortcutInfoForExtensionAndProfile(app, profile));
|
| base::FilePath shortcut_data_dir = GetShortcutDataDir(*shortcut_info);
|
| - BrowserThread::PostTask(
|
| + const web_app::ShortcutInfo& shortcut_info_ref = *shortcut_info;
|
| +
|
| + BrowserThread::PostTaskAndReply(
|
| BrowserThread::FILE, FROM_HERE,
|
| base::Bind(&web_app::internals::DeletePlatformShortcuts,
|
| - shortcut_data_dir, base::Passed(&shortcut_info)));
|
| + shortcut_data_dir, base::ConstRef(shortcut_info_ref)),
|
| + base::Bind(&web_app::internals::DeleteShortcutInfoOnUIThread,
|
| + base::Passed(&shortcut_info), base::Closure()));
|
| }
|
|
|
| void UpdateAllShortcuts(const base::string16& old_app_title,
|
|
|