web_app.h revision cedac228d2dd51db4b79ea1e72c7f249408ee061
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_WEB_APPLICATIONS_WEB_APP_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_WEB_APPLICATIONS_WEB_APP_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "base/callback.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h"
13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "build/build_config.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/shell_integration.h"
16b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "chrome/common/web_application_info.h"
17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "extensions/common/manifest_handlers/file_handler_info.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochclass Profile;
20e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
21c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochnamespace content {
22c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass WebContents;
23c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}
24c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Extension;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace gfx {
30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class ImageFamily;
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
33a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// This namespace contains everything related to integrating Chrome apps into
34a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// the OS. E.g. creating and updating shorcuts for apps, setting up file
35a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// associations, etc.
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace web_app {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
38a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Represents the info required to create a shortcut for an app.
39a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochstruct ShortcutInfo {
40a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  ShortcutInfo();
41a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  ~ShortcutInfo();
42a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
43a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  GURL url;
44a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  // If |extension_id| is non-empty, this is short cut is to an extension-app
45a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  // and the launch url will be detected at start-up. In this case, |url|
46a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  // is still used to generate the app id (windows app id, not chrome app id).
47a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  std::string extension_id;
48a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  bool is_platform_app;
49a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  base::string16 title;
50a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  base::string16 description;
51a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  base::FilePath extension_path;
52a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  gfx::ImageFamily favicon;
53a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  base::FilePath profile_path;
54a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  std::string profile_name;
55a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch};
56a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
57a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// This specifies a folder in the system applications menu (e.g the Start Menu
58a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// on Windows).
59a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch//
60a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// These represent the applications menu root, the "Google Chrome" folder and
61a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// the "Chrome Apps" folder respectively.
62a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch//
63a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// NB: On Linux, these locations may not be used by the window manager (e.g
64a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Unity and Gnome Shell).
65a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochenum ApplicationsMenuLocation {
66a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  APP_MENU_LOCATION_NONE,
67a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  APP_MENU_LOCATION_ROOT,
68a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  APP_MENU_LOCATION_SUBDIR_CHROME,
69a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  APP_MENU_LOCATION_SUBDIR_CHROMEAPPS,
70a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch};
71a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
72a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Info about which locations to create app shortcuts in.
73a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochstruct ShortcutLocations {
74a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  ShortcutLocations();
75a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
76a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  bool on_desktop;
77a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
78a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  ApplicationsMenuLocation applications_menu_location;
79a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
80a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  // For Windows, this refers to quick launch bar prior to Win7. In Win7,
81a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  // this means "pin to taskbar". For Mac/Linux, this could be used for
82a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  // Mac dock or the gnome/kde application launcher. However, those are not
83a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  // implemented yet.
84a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  bool in_quick_launch_bar;
85a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
86a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if defined(OS_POSIX)
87a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  // For Linux, this refers to a shortcut which the system knows about (for
88a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  // the purpose of identifying windows and giving them the correct
89a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  // title/icon), but which does not show up in menus or search results.
90a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  // Ignored if applications_menu_location is not APP_MENU_LOCATION_NONE.
91a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  bool hidden;
92a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#endif
93a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch};
94a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
95558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch// This encodes the cause of shortcut creation as the correct behavior in each
96558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch// case is implementation specific.
97558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochenum ShortcutCreationReason {
98558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  SHORTCUT_CREATION_BY_USER,
99558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  SHORTCUT_CREATION_AUTOMATED,
100eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch};
101eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)typedef base::Callback<void(const ShortcutInfo&)> ShortcutInfoCallback;
103e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
104c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Extracts shortcut info of the given WebContents.
105c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid GetShortcutInfoForTab(content::WebContents* web_contents,
106cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                           ShortcutInfo* info);
107c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
108c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Updates web app shortcut of the WebContents. This function checks and
109c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// updates web app icon and shortcuts if needed. For icon, the check is based
110c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// on MD5 hash of icon image. For shortcuts, it checks the desktop, start menu
111c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// and quick launch (as well as pinned shortcut) for shortcut and only
112c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// updates (recreates) them if they exits.
113c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid UpdateShortcutForTabContents(content::WebContents* web_contents);
114c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
115cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)ShortcutInfo ShortcutInfoForExtensionAndProfile(
116e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    const extensions::Extension* app,
117e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    Profile* profile);
118e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
119e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// Fetches the icon for |extension| and calls |callback| with shortcut info
120e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// filled out as by UpdateShortcutInfoForApp.
121cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void UpdateShortcutInfoAndIconForApp(const extensions::Extension* extension,
122cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                     Profile* profile,
123cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                     const ShortcutInfoCallback& callback);
124e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Gets the user data directory for given web app. The path for the directory is
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// based on |extension_id|. If |extension_id| is empty then |url| is used
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// to construct a unique ID.
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::FilePath GetWebAppDataDirectory(const base::FilePath& profile_path,
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                      const std::string& extension_id,
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                      const GURL& url);
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Gets the user data directory to use for |extension| located inside
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// |profile_path|.
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::FilePath GetWebAppDataDirectory(const base::FilePath& profile_path,
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                      const extensions::Extension& extension);
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Compute a deterministic name based on data in the shortcut_info.
138cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)std::string GenerateApplicationNameFromInfo(const ShortcutInfo& shortcut_info);
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Compute a deterministic name based on the URL. We use this pseudo name
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// as a key to store window location per application URLs in Browser and
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// as app id for BrowserWindow, shortcut and jump list.
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string GenerateApplicationNameFromURL(const GURL& url);
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Compute a deterministic name based on an extension/apps's id.
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string GenerateApplicationNameFromExtensionId(const std::string& id);
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Extracts the extension id from the app name.
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string GetExtensionIdFromApplicationName(const std::string& app_name);
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
151c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Create shortcuts for web application based on given shortcut data.
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// |shortcut_info| contains information about the shortcuts to create, and
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// |creation_locations| contains information about where to create them.
154cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void CreateShortcutsForShortcutInfo(ShortcutCreationReason reason,
155cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                    const ShortcutLocations& locations,
156cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                    const ShortcutInfo& shortcut_info);
157c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
158c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Creates shortcuts for an app.
159cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void CreateShortcuts(ShortcutCreationReason reason,
160cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                     const ShortcutLocations& locations,
161cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                     Profile* profile,
162cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                     const extensions::Extension* app);
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
164c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Delete all shortcuts that have been created for the given profile and
165c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// extension.
166c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid DeleteAllShortcuts(Profile* profile, const extensions::Extension* app);
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Updates shortcuts for web application based on given shortcut data. This
169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// refreshes existing shortcuts and their icons, but does not create new ones.
17090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// |old_app_title| contains the title of the app prior to this update.
171a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void UpdateAllShortcuts(const base::string16& old_app_title,
172c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                        Profile* profile,
173c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                        const extensions::Extension* app);
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns true if given url is a valid web app url.
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool IsValidUrl(const GURL& url);
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(TOOLKIT_VIEWS)
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Extracts icons info from web app data. Take only square shaped icons and
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// sort them from smallest to largest.
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::vector<WebApplicationInfo::IconInfo> IconInfoList;
182cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void GetIconsInfo(const WebApplicationInfo& app_info, IconInfoList* icons);
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(OS_LINUX)
18658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Windows that correspond to web apps need to have a deterministic (and
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// different) WMClass than normal chrome windows so the window manager groups
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// them as a separate application.
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string GetWMClassFromAppName(std::string app_name);
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace internals {
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
195a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Returns the Windows user-level shortcut paths that are specified in
196a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// |creation_locations|.
197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)std::vector<base::FilePath> GetShortcutPaths(
198cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    const ShortcutLocations& creation_locations);
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
201c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Creates a shortcut. Must be called on the file thread. This is used to
202c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// implement CreateShortcuts() above, and can also be used directly from the
203c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// file thread. |shortcut_info| contains info about the shortcut to create, and
204c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// |creation_locations| contains information about where to create them.
205cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool CreateShortcutsOnFileThread(ShortcutCreationReason reason,
206cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                 const ShortcutLocations& locations,
207cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                 const ShortcutInfo& shortcut_info);
208c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Implemented for each platform, does the platform specific parts of creating
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// shortcuts. Used internally by CreateShortcutsOnFileThread.
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// |shortcut_data_path| is where to store any resources created for the
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// shortcut, and is also used as the UserDataDir for platform app shortcuts.
2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// |shortcut_info| contains info about the shortcut to create, and
2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// |creation_locations| contains information about where to create them.
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool CreatePlatformShortcuts(
2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const base::FilePath& shortcut_data_path,
217cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    const ShortcutInfo& shortcut_info,
218a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    const extensions::FileHandlersInfo& file_handlers_info,
219cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    const ShortcutLocations& creation_locations,
220558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    ShortcutCreationReason creation_reason);
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Delete all the shortcuts we have added for this extension. This is the
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// platform specific implementation of the DeleteAllShortcuts function, and
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// is executed on the FILE thread.
225cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void DeletePlatformShortcuts(const base::FilePath& shortcut_data_path,
226cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                             const ShortcutInfo& shortcut_info);
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Updates all the shortcuts we have added for this extension. This is the
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// platform specific implementation of the UpdateAllShortcuts function, and
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// is executed on the FILE thread.
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UpdatePlatformShortcuts(
2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const base::FilePath& shortcut_data_path,
233a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    const base::string16& old_app_title,
234cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    const ShortcutInfo& shortcut_info,
235a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    const extensions::FileHandlersInfo& file_handlers_info);
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
237eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Delete all the shortcuts for an entire profile.
238eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// This is executed on the FILE thread.
239eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid DeleteAllShortcutsForProfile(const base::FilePath& profile_path);
240eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Sanitizes |name| and returns a version of it that is safe to use as an
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// on-disk file name .
243a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)base::FilePath GetSanitizedFileName(const base::string16& name);
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace internals
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace web_app
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_WEB_APPLICATIONS_WEB_APP_H_
250