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