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

Unified Diff: chrome/browser/web_applications/web_app.h

Issue 1038573002: Fixed thread-unsafe use of gfx::Image in app shortcut creation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 5 years, 9 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.h
diff --git a/chrome/browser/web_applications/web_app.h b/chrome/browser/web_applications/web_app.h
index a7d93fbeea64e1884a80acf54b894747ef0f496c..72f728cb5da60d5eb839ec883c10c5dde7879d36 100644
--- a/chrome/browser/web_applications/web_app.h
+++ b/chrome/browser/web_applications/web_app.h
@@ -10,6 +10,7 @@
#include "base/callback.h"
#include "base/files/file_path.h"
+#include "base/memory/scoped_ptr.h"
#include "base/strings/string16.h"
#include "build/build_config.h"
#include "chrome/browser/shell_integration.h"
@@ -53,6 +54,12 @@ struct ShortcutInfo {
base::FilePath profile_path;
std::string profile_name;
std::string version_for_display;
+
+ private:
+ // ShortcutInfo must not be copied; generally it is passed around via
+ // scoped_ptrs. This is to allow passing ShortcutInfos between threads,
+ // despite ImageFamily having a non-thread-safe reference count.
+ DISALLOW_COPY_AND_ASSIGN(ShortcutInfo);
};
// This specifies a folder in the system applications menu (e.g the Start Menu
@@ -98,16 +105,16 @@ enum ShortcutCreationReason {
};
// Called by GetInfoForApp after fetching the ShortcutInfo and FileHandlersInfo.
-typedef base::Callback<void(const ShortcutInfo&,
+typedef base::Callback<void(scoped_ptr<ShortcutInfo>,
const extensions::FileHandlersInfo&)> InfoCallback;
// Called by GetShortcutInfoForApp after fetching the ShortcutInfo.
-typedef base::Callback<void(const ShortcutInfo&)> ShortcutInfoCallback;
+typedef base::Callback<void(scoped_ptr<ShortcutInfo>)> ShortcutInfoCallback;
#if defined(TOOLKIT_VIEWS)
// Extracts shortcut info of the given WebContents.
-void GetShortcutInfoForTab(content::WebContents* web_contents,
- ShortcutInfo* info);
+scoped_ptr<ShortcutInfo> GetShortcutInfoForTab(
+ content::WebContents* web_contents);
#endif
// Updates web app shortcut of the WebContents. This function checks and
@@ -117,7 +124,7 @@ void GetShortcutInfoForTab(content::WebContents* web_contents,
// updates (recreates) them if they exits.
void UpdateShortcutForTabContents(content::WebContents* web_contents);
-ShortcutInfo ShortcutInfoForExtensionAndProfile(
+scoped_ptr<ShortcutInfo> ShortcutInfoForExtensionAndProfile(
const extensions::Extension* app,
Profile* profile);
@@ -173,13 +180,13 @@ std::string GetExtensionIdFromApplicationName(const std::string& app_name);
void CreateShortcutsWithInfo(
ShortcutCreationReason reason,
const ShortcutLocations& locations,
- const ShortcutInfo& shortcut_info,
+ scoped_ptr<ShortcutInfo> shortcut_info,
const extensions::FileHandlersInfo& file_handlers_info);
// Currently only called by app_list_service_mac to create a shim for the
// app launcher.
void CreateNonAppShortcut(const ShortcutLocations& locations,
- const ShortcutInfo& shortcut_info);
+ scoped_ptr<ShortcutInfo> shortcut_info);
// Creates shortcuts for an app. This loads the app's icon from disk, and calls
// CreateShortcutsWithInfo(). If you already have a ShortcutInfo with the app's
@@ -239,7 +246,7 @@ std::vector<base::FilePath> GetShortcutPaths(
// |creation_locations| contains information about where to create them.
bool CreatePlatformShortcuts(
const base::FilePath& shortcut_data_path,
- const ShortcutInfo& shortcut_info,
+ scoped_ptr<ShortcutInfo> shortcut_info,
const extensions::FileHandlersInfo& file_handlers_info,
const ShortcutLocations& creation_locations,
ShortcutCreationReason creation_reason);
@@ -248,7 +255,7 @@ bool CreatePlatformShortcuts(
// platform specific implementation of the DeleteAllShortcuts function, and
// is executed on the FILE thread.
void DeletePlatformShortcuts(const base::FilePath& shortcut_data_path,
- const ShortcutInfo& shortcut_info);
+ scoped_ptr<ShortcutInfo> shortcut_info);
// Updates all the shortcuts we have added for this extension. This is the
// platform specific implementation of the UpdateAllShortcuts function, and
@@ -256,7 +263,7 @@ void DeletePlatformShortcuts(const base::FilePath& shortcut_data_path,
void UpdatePlatformShortcuts(
const base::FilePath& shortcut_data_path,
const base::string16& old_app_title,
- const ShortcutInfo& shortcut_info,
+ scoped_ptr<ShortcutInfo> shortcut_info,
const extensions::FileHandlersInfo& file_handlers_info);
// Delete all the shortcuts for an entire profile.

Powered by Google App Engine
This is Rietveld 408576698