web_app.h revision 5821806d5e7f356e8fa4b058a389a808ea183019
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)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/file_path.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "build/build_config.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/shell_integration.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/web_apps.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Extension;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace web_app {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Gets the user data directory for given web app. The path for the directory is
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// based on |extension_id|. If |extension_id| is empty then |url| is used
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// to construct a unique ID.
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FilePath GetWebAppDataDirectory(const FilePath& profile_path,
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                const std::string& extension_id,
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                const GURL& url);
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Gets the user data directory to use for |extension| located inside
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// |profile_path|.
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FilePath GetWebAppDataDirectory(const FilePath& profile_path,
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                const extensions::Extension& extension);
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Compute a deterministic name based on data in the shortcut_info.
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string GenerateApplicationNameFromInfo(
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const ShellIntegration::ShortcutInfo& shortcut_info);
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Compute a deterministic name based on the URL. We use this pseudo name
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// as a key to store window location per application URLs in Browser and
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// as app id for BrowserWindow, shortcut and jump list.
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string GenerateApplicationNameFromURL(const GURL& url);
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Compute a deterministic name based on an extension/apps's id.
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string GenerateApplicationNameFromExtensionId(const std::string& id);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Extracts the extension id from the app name.
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string GetExtensionIdFromApplicationName(const std::string& app_name);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Creates shortcuts for web application based on given shortcut data.
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// |shortcut_info| contains information about the shortcuts to create.
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CreateShortcuts(const ShellIntegration::ShortcutInfo& shortcut_info);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Delete all the shortcuts that have been created for the given
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// |shortcut_data| in the profile with |profile_path|.
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DeleteAllShortcuts(const ShellIntegration::ShortcutInfo& shortcut_info);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Updates shortcuts for web application based on given shortcut data.
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// |shortcut_info| contains information about the shortcuts to update.
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UpdateAllShortcuts(const ShellIntegration::ShortcutInfo& shortcut_info);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Creates a shortcut. Must be called on the file thread. This is used to
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// implement CreateShortcuts() above, and can also be used directly from the
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// file thread. |shortcut_info| contains info about the shortcut to create.
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool CreateShortcutsOnFileThread(
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const ShellIntegration::ShortcutInfo& shortcut_info);
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns true if given url is a valid web app url.
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool IsValidUrl(const GURL& url);
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(TOOLKIT_VIEWS)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Extracts icons info from web app data. Take only square shaped icons and
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// sort them from smallest to largest.
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::vector<WebApplicationInfo::IconInfo> IconInfoList;
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GetIconsInfo(const WebApplicationInfo& app_info,
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  IconInfoList* icons);
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(TOOLKIT_GTK)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// GTK+ windows that correspond to web apps need to have a deterministic (and
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// different) WMClass than normal chrome windows so the window manager groups
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// them as a separate application.
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string GetWMClassFromAppName(std::string app_name);
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace internals {
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool CheckAndSaveIcon(const FilePath& icon_file, const SkBitmap& image);
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Implemented for each platform, does the platform specific parts of creating
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// shortcuts. Used internally by CreateShortcutsOnFileThread.
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// |shortcut_data_path| is where to store any resources created for the
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// shortcut, and is also used as the UserDataDir for platform app shortcuts.
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// |shortcut_info| contains info about the shortcut to create.
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool CreatePlatformShortcuts(
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const FilePath& shortcut_data_path,
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const ShellIntegration::ShortcutInfo& shortcut_info);
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Delete all the shortcuts we have added for this extension. This is the
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// platform specific implementation of the DeleteAllShortcuts function, and
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// is executed on the FILE thread.
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DeletePlatformShortcuts(
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const FilePath& shortcut_data_path,
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const ShellIntegration::ShortcutInfo& shortcut_info);
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Updates all the shortcuts we have added for this extension. This is the
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// platform specific implementation of the UpdateAllShortcuts function, and
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// is executed on the FILE thread.
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UpdatePlatformShortcuts(
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const FilePath& shortcut_data_path,
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const ShellIntegration::ShortcutInfo& shortcut_info);
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Sanitizes |name| and returns a version of it that is safe to use as an
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// on-disk file name .
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FilePath GetSanitizedFileName(const string16& name);
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace internals
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace web_app
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_WEB_APPLICATIONS_WEB_APP_H_
123