web_app.h revision 116680a4aac90f2aa7413d9095a592090648e557
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// 63f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// APP_MENU_LOCATION_HIDDEN specifies a shortcut that is used to register the 64f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// app with the OS (in order to give its windows shelf icons, and correct icons 65f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// and titles), but the app should not show up in menus or search results. 66f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// 67a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// NB: On Linux, these locations may not be used by the window manager (e.g 68a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Unity and Gnome Shell). 69a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochenum ApplicationsMenuLocation { 70a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch APP_MENU_LOCATION_NONE, 71a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch APP_MENU_LOCATION_ROOT, 72a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch APP_MENU_LOCATION_SUBDIR_CHROME, 73a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch APP_MENU_LOCATION_SUBDIR_CHROMEAPPS, 74f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) APP_MENU_LOCATION_HIDDEN, 75a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch}; 76a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 77a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Info about which locations to create app shortcuts in. 78a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochstruct ShortcutLocations { 79a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ShortcutLocations(); 80a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 81a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch bool on_desktop; 82a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 83a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ApplicationsMenuLocation applications_menu_location; 84a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 85a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // For Windows, this refers to quick launch bar prior to Win7. In Win7, 86a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // this means "pin to taskbar". For Mac/Linux, this could be used for 87a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Mac dock or the gnome/kde application launcher. However, those are not 88a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // implemented yet. 89a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch bool in_quick_launch_bar; 90a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch}; 91a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 92558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch// This encodes the cause of shortcut creation as the correct behavior in each 93558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch// case is implementation specific. 94558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochenum ShortcutCreationReason { 95558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch SHORTCUT_CREATION_BY_USER, 96558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch SHORTCUT_CREATION_AUTOMATED, 97eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}; 98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 99f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Called by GetInfoForApp after fetching the ShortcutInfo and FileHandlersInfo. 100f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)typedef base::Callback<void(const ShortcutInfo&, 101f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const extensions::FileHandlersInfo&)> InfoCallback; 102f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Called by GetShortcutInfoForApp after fetching the ShortcutInfo. 104cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)typedef base::Callback<void(const ShortcutInfo&)> ShortcutInfoCallback; 105e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(TOOLKIT_VIEWS) 107c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Extracts shortcut info of the given WebContents. 108c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid GetShortcutInfoForTab(content::WebContents* web_contents, 109cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ShortcutInfo* info); 110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 111c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 112c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Updates web app shortcut of the WebContents. This function checks and 113c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// updates web app icon and shortcuts if needed. For icon, the check is based 114c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// on MD5 hash of icon image. For shortcuts, it checks the desktop, start menu 115c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// and quick launch (as well as pinned shortcut) for shortcut and only 116c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// updates (recreates) them if they exits. 117c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid UpdateShortcutForTabContents(content::WebContents* web_contents); 118c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 119cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)ShortcutInfo ShortcutInfoForExtensionAndProfile( 120e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch const extensions::Extension* app, 121e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch Profile* profile); 122e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Populates a ShortcutInfo and FileHandlersInfo for the given |extension| in 124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// |profile| and passes them to |callback| after asynchronously loading all icon 125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// representations. 126116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid GetInfoForApp(const extensions::Extension* extension, 127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch Profile* profile, 128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const InfoCallback& callback); 129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 130116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Populates a ShortcutInfo for the given |extension| in |profile| and passes 131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// it to |callback| after asynchronously loading all icon representations. This 132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// is equivalent to GetInfoForApp, but it throws away the FileHandlersInfo. 133116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid GetShortcutInfoForApp(const extensions::Extension* extension, 134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch Profile* profile, 135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const ShortcutInfoCallback& callback); 136e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 13746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Whether to create a shortcut for this type of extension. 13846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)bool ShouldCreateShortcutFor(Profile* profile, 13946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const extensions::Extension* extension); 14046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Gets the user data directory for given web app. The path for the directory is 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// based on |extension_id|. If |extension_id| is empty then |url| is used 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// to construct a unique ID. 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::FilePath GetWebAppDataDirectory(const base::FilePath& profile_path, 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& extension_id, 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL& url); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Gets the user data directory to use for |extension| located inside 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// |profile_path|. 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::FilePath GetWebAppDataDirectory(const base::FilePath& profile_path, 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const extensions::Extension& extension); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Compute a deterministic name based on data in the shortcut_info. 154cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)std::string GenerateApplicationNameFromInfo(const ShortcutInfo& shortcut_info); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Compute a deterministic name based on the URL. We use this pseudo name 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// as a key to store window location per application URLs in Browser and 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// as app id for BrowserWindow, shortcut and jump list. 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string GenerateApplicationNameFromURL(const GURL& url); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Compute a deterministic name based on an extension/apps's id. 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string GenerateApplicationNameFromExtensionId(const std::string& id); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Extracts the extension id from the app name. 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string GetExtensionIdFromApplicationName(const std::string& app_name); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 167c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Create shortcuts for web application based on given shortcut data. 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// |shortcut_info| contains information about the shortcuts to create, and 169116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// |locations| contains information about where to create them, while 170116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// |file_handlers_info| contains information about the file handlers to create. 171116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid CreateShortcutsWithInfo( 172116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ShortcutCreationReason reason, 173116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const ShortcutLocations& locations, 174116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const ShortcutInfo& shortcut_info, 175116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const extensions::FileHandlersInfo& file_handlers_info); 176c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 177116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Creates shortcuts for an app. This loads the app's icon from disk, and calls 178116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// CreateShortcutsWithInfo(). If you already have a ShortcutInfo with the app's 179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// icon loaded, you should use CreateShortcutsWithInfo() directly. 180cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void CreateShortcuts(ShortcutCreationReason reason, 181cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const ShortcutLocations& locations, 182cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Profile* profile, 183cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const extensions::Extension* app); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Delete all shortcuts that have been created for the given profile and 186c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// extension. 187c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid DeleteAllShortcuts(Profile* profile, const extensions::Extension* app); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Updates shortcuts for web application based on given shortcut data. This 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// refreshes existing shortcuts and their icons, but does not create new ones. 19190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// |old_app_title| contains the title of the app prior to this update. 192a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void UpdateAllShortcuts(const base::string16& old_app_title, 193c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch Profile* profile, 194c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const extensions::Extension* app); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Updates shortcuts for all apps in this profile. This is expected to be called 19746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// on the UI thread. 19846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void UpdateShortcutsForAllApps(Profile* profile, 19946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const base::Closure& callback); 20046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns true if given url is a valid web app url. 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool IsValidUrl(const GURL& url); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(TOOLKIT_VIEWS) 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Extracts icons info from web app data. Take only square shaped icons and 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// sort them from smallest to largest. 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::vector<WebApplicationInfo::IconInfo> IconInfoList; 208cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void GetIconsInfo(const WebApplicationInfo& app_info, IconInfoList* icons); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(OS_LINUX) 21258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Windows that correspond to web apps need to have a deterministic (and 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// different) WMClass than normal chrome windows so the window manager groups 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// them as a separate application. 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string GetWMClassFromAppName(std::string app_name); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace internals { 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 221a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Returns the Windows user-level shortcut paths that are specified in 222a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// |creation_locations|. 223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)std::vector<base::FilePath> GetShortcutPaths( 224cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const ShortcutLocations& creation_locations); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Implemented for each platform, does the platform specific parts of creating 228116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// shortcuts. Used internally by CreateShortcuts methods. 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// |shortcut_data_path| is where to store any resources created for the 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// shortcut, and is also used as the UserDataDir for platform app shortcuts. 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// |shortcut_info| contains info about the shortcut to create, and 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// |creation_locations| contains information about where to create them. 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool CreatePlatformShortcuts( 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& shortcut_data_path, 235cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const ShortcutInfo& shortcut_info, 236a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const extensions::FileHandlersInfo& file_handlers_info, 237cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const ShortcutLocations& creation_locations, 238558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch ShortcutCreationReason creation_reason); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Delete all the shortcuts we have added for this extension. This is the 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// platform specific implementation of the DeleteAllShortcuts function, and 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// is executed on the FILE thread. 243cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void DeletePlatformShortcuts(const base::FilePath& shortcut_data_path, 244cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const ShortcutInfo& shortcut_info); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Updates all the shortcuts we have added for this extension. This is the 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// platform specific implementation of the UpdateAllShortcuts function, and 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// is executed on the FILE thread. 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UpdatePlatformShortcuts( 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& shortcut_data_path, 251a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& old_app_title, 252cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const ShortcutInfo& shortcut_info, 253a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const extensions::FileHandlersInfo& file_handlers_info); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Delete all the shortcuts for an entire profile. 256eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// This is executed on the FILE thread. 257eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid DeleteAllShortcutsForProfile(const base::FilePath& profile_path); 258eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Sanitizes |name| and returns a version of it that is safe to use as an 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// on-disk file name . 261a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)base::FilePath GetSanitizedFileName(const base::string16& name); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace internals 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace web_app 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_WEB_APPLICATIONS_WEB_APP_H_ 268