1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_COMMON_WEB_APPS_H_ 6 #define CHROME_COMMON_WEB_APPS_H_ 7 #pragma once 8 9 #include <string> 10 #include <vector> 11 12 #include "base/string16.h" 13 #include "googleurl/src/gurl.h" 14 #include "third_party/skia/include/core/SkBitmap.h" 15 #include "ui/gfx/size.h" 16 17 namespace WebKit { 18 class WebDocument; 19 class WebFrame; 20 } 21 22 class Value; 23 24 // Structure used when installing a web page as an app. 25 struct WebApplicationInfo { 26 struct IconInfo { 27 GURL url; 28 int width; 29 int height; 30 SkBitmap data; 31 }; 32 33 static const char kInvalidDefinitionURL[]; 34 static const char kInvalidLaunchURL[]; 35 static const char kInvalidURL[]; 36 static const char kInvalidIconSize[]; 37 static const char kInvalidIconURL[]; 38 39 WebApplicationInfo(); 40 ~WebApplicationInfo(); 41 42 // URL to a manifest that defines the application. If specified, all other 43 // attributes are derived from this manifest, and the manifest is the unique 44 // ID of the application. 45 GURL manifest_url; 46 47 // Title of the application. 48 string16 title; 49 50 // Description of the application. 51 string16 description; 52 53 // The launch URL for the app. 54 GURL app_url; 55 56 // Set of available icons. 57 std::vector<IconInfo> icons; 58 59 // The permissions the app requests. Only supported with manifest-based apps. 60 std::vector<std::string> permissions; 61 62 // Set of URLs that comprise the app. Only supported with manifest-based apps. 63 // All these must be of the same origin as manifest_url. 64 std::vector<GURL> urls; 65 66 // The type of launch container to use with the app. Currently supported 67 // values are 'tab' and 'panel'. Only supported with manifest-based apps. 68 std::string launch_container; 69 }; 70 71 72 namespace web_apps { 73 74 // Parses an icon size. An icon size must match the following regex: 75 // [1-9][0-9]*x[1-9][0-9]*. 76 // If the input couldn't be parsed, a size with a width/height == 0 is returned. 77 gfx::Size ParseIconSize(const string16& text); 78 79 // Parses the icon's size attribute as defined in the HTML 5 spec. Returns true 80 // on success, false on errors. On success either all the sizes specified in 81 // the attribute are added to sizes, or is_any is set to true. 82 // 83 // You shouldn't have a need to invoke this directly, it's public for testing. 84 bool ParseIconSizes(const string16& text, std::vector<gfx::Size>* sizes, 85 bool* is_any); 86 87 // Parses |web_app| information out of the document in frame. Returns true on 88 // success, or false and |error| on failure. Note that the document may contain 89 // no web application information, in which case |web_app| is unchanged and the 90 // function returns true. 91 // 92 // Documents can also contain a link to a application 'definition'. In this case 93 // web_app will have manifest_url set and nothing else. The caller must fetch 94 // this URL and pass the result to ParseWebAppFromDefinitionFile() for further 95 // processing. 96 bool ParseWebAppFromWebDocument(WebKit::WebFrame* frame, 97 WebApplicationInfo* web_app, 98 string16* error); 99 100 // Parses |web_app| information out of |definition|. Returns true on success, or 101 // false and |error| on failure. This function assumes that |web_app| has a 102 // valid manifest_url. 103 bool ParseWebAppFromDefinitionFile(Value* definition, 104 WebApplicationInfo* web_app, 105 string16* error); 106 107 } // namespace web_apps 108 109 #endif // CHROME_COMMON_WEB_APPS_H_ 110