OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CHROME_BROWSER_CHROMEOS_DRIVE_DRIVE_WEBAPPS_REGISTRY_H_ | 5 #ifndef CHROME_BROWSER_CHROMEOS_DRIVE_DRIVE_WEBAPPS_REGISTRY_H_ |
6 #define CHROME_BROWSER_CHROMEOS_DRIVE_DRIVE_WEBAPPS_REGISTRY_H_ | 6 #define CHROME_BROWSER_CHROMEOS_DRIVE_DRIVE_WEBAPPS_REGISTRY_H_ |
7 | 7 |
8 #include <map> | 8 #include <map> |
9 #include <set> | 9 #include <set> |
10 #include <string> | 10 #include <string> |
11 | 11 |
12 #include "base/memory/scoped_vector.h" | 12 #include "base/memory/scoped_vector.h" |
13 #include "chrome/browser/google_apis/gdata_wapi_parser.h" | 13 #include "chrome/browser/google_apis/gdata_wapi_parser.h" |
14 #include "googleurl/src/gurl.h" | 14 #include "googleurl/src/gurl.h" |
15 | 15 |
16 class FilePath; | 16 class FilePath; |
17 | 17 |
18 namespace gdata { | 18 namespace gdata { |
| 19 class AppList; |
| 20 } |
19 | 21 |
20 class AppList; | 22 namespace drive { |
21 | 23 |
22 // Data structure that defines WebApp | 24 // Data structure that defines WebApp |
23 struct DriveWebAppInfo { | 25 struct DriveWebAppInfo { |
24 DriveWebAppInfo(const std::string& app_id, | 26 DriveWebAppInfo(const std::string& app_id, |
25 const InstalledApp::IconList& app_icons, | 27 const gdata::InstalledApp::IconList& app_icons, |
26 const InstalledApp::IconList& document_icons, | 28 const gdata::InstalledApp::IconList& document_icons, |
27 const std::string& web_store_id, | 29 const std::string& web_store_id, |
28 const string16& app_name, | 30 const string16& app_name, |
29 const string16& object_type, | 31 const string16& object_type, |
30 bool is_primary_selector); | 32 bool is_primary_selector); |
31 ~DriveWebAppInfo(); | 33 ~DriveWebAppInfo(); |
32 | 34 |
33 // Drive app id | 35 // Drive app id |
34 std::string app_id; | 36 std::string app_id; |
35 // Drive application icon URLs for this app, paired with their size (length of | 37 // Drive application icon URLs for this app, paired with their size (length of |
36 // a side in pixels). | 38 // a side in pixels). |
37 InstalledApp::IconList app_icons; | 39 gdata::InstalledApp::IconList app_icons; |
38 // Drive document icon URLs for this app, paired with their size (length of | 40 // Drive document icon URLs for this app, paired with their size (length of |
39 // a side in pixels). | 41 // a side in pixels). |
40 InstalledApp::IconList document_icons; | 42 gdata::InstalledApp::IconList document_icons; |
41 // Web store id/extension id; | 43 // Web store id/extension id; |
42 std::string web_store_id; | 44 std::string web_store_id; |
43 // WebApp name. | 45 // WebApp name. |
44 string16 app_name; | 46 string16 app_name; |
45 // Object (file) type description handled by this app. | 47 // Object (file) type description handled by this app. |
46 string16 object_type; | 48 string16 object_type; |
47 // Is app the primary selector for file (default open action). | 49 // Is app the primary selector for file (default open action). |
48 bool is_primary_selector; | 50 bool is_primary_selector; |
49 }; | 51 }; |
50 | 52 |
51 // DriveWebAppsRegistry abstraction layer. | 53 // DriveWebAppsRegistry abstraction layer. |
52 // The interface is defined to make DriveWebAppsRegistry mockable. | 54 // The interface is defined to make DriveWebAppsRegistry mockable. |
53 class DriveWebAppsRegistryInterface { | 55 class DriveWebAppsRegistryInterface { |
54 public: | 56 public: |
55 virtual ~DriveWebAppsRegistryInterface() {} | 57 virtual ~DriveWebAppsRegistryInterface() {} |
56 | 58 |
57 // Gets the list of web |apps| matching |file| and its |mime_type|. | 59 // Gets the list of web |apps| matching |file| and its |mime_type|. |
58 virtual void GetWebAppsForFile(const FilePath& file, | 60 virtual void GetWebAppsForFile(const FilePath& file, |
59 const std::string& mime_type, | 61 const std::string& mime_type, |
60 ScopedVector<DriveWebAppInfo>* apps) = 0; | 62 ScopedVector<DriveWebAppInfo>* apps) = 0; |
61 | 63 |
62 // Returns a set of filename extensions registered for the given | 64 // Returns a set of filename extensions registered for the given |
63 // |web_store_id|. | 65 // |web_store_id|. |
64 virtual std::set<std::string> GetExtensionsForWebStoreApp( | 66 virtual std::set<std::string> GetExtensionsForWebStoreApp( |
65 const std::string& web_store_id) = 0; | 67 const std::string& web_store_id) = 0; |
66 | 68 |
67 // Updates the list of drive-enabled WebApps with freshly fetched account | 69 // Updates the list of drive-enabled WebApps with freshly fetched account |
68 // metadata feed. | 70 // metadata feed. |
69 virtual void UpdateFromFeed(const AccountMetadataFeed& metadata) = 0; | 71 virtual void UpdateFromFeed(const gdata::AccountMetadataFeed& metadata) = 0; |
70 | 72 |
71 // Updates the list of drive-enabled WebApps with freshly fetched account | 73 // Updates the list of drive-enabled WebApps with freshly fetched account |
72 // metadata feed. | 74 // metadata feed. |
73 virtual void UpdateFromApplicationList(const AppList& applist) = 0; | 75 virtual void UpdateFromApplicationList(const gdata::AppList& applist) = 0; |
74 }; | 76 }; |
75 | 77 |
76 // The production implementation of DriveWebAppsRegistryInterface. | 78 // The production implementation of DriveWebAppsRegistryInterface. |
77 // Keeps the track of installed drive web application and provider. | 79 // Keeps the track of installed drive web application and provider. |
78 class DriveWebAppsRegistry : public DriveWebAppsRegistryInterface { | 80 class DriveWebAppsRegistry : public DriveWebAppsRegistryInterface { |
79 public: | 81 public: |
80 DriveWebAppsRegistry(); | 82 DriveWebAppsRegistry(); |
81 virtual ~DriveWebAppsRegistry(); | 83 virtual ~DriveWebAppsRegistry(); |
82 | 84 |
83 // DriveWebAppsRegistry overrides. | 85 // DriveWebAppsRegistry overrides. |
84 virtual void GetWebAppsForFile(const FilePath& file, | 86 virtual void GetWebAppsForFile(const FilePath& file, |
85 const std::string& mime_type, | 87 const std::string& mime_type, |
86 ScopedVector<DriveWebAppInfo>* apps) OVERRIDE; | 88 ScopedVector<DriveWebAppInfo>* apps) OVERRIDE; |
87 virtual std::set<std::string> GetExtensionsForWebStoreApp( | 89 virtual std::set<std::string> GetExtensionsForWebStoreApp( |
88 const std::string& web_store_id) OVERRIDE; | 90 const std::string& web_store_id) OVERRIDE; |
89 virtual void UpdateFromFeed(const AccountMetadataFeed& metadata) OVERRIDE; | 91 virtual void UpdateFromFeed( |
90 virtual void UpdateFromApplicationList(const AppList& applist) OVERRIDE; | 92 const gdata::AccountMetadataFeed& metadata) OVERRIDE; |
| 93 virtual void UpdateFromApplicationList( |
| 94 const gdata::AppList& applist) OVERRIDE; |
91 | 95 |
92 private: | 96 private: |
93 // Defines WebApp application details that are associated with a given | 97 // Defines WebApp application details that are associated with a given |
94 // file extension or content mimetype. | 98 // file extension or content mimetype. |
95 struct WebAppFileSelector { | 99 struct WebAppFileSelector { |
96 WebAppFileSelector(const GURL& product_link, | 100 WebAppFileSelector(const GURL& product_link, |
97 const InstalledApp::IconList& app_icons, | 101 const gdata::InstalledApp::IconList& app_icons, |
98 const InstalledApp::IconList& document_icons, | 102 const gdata::InstalledApp::IconList& document_icons, |
99 const string16& object_type, | 103 const string16& object_type, |
100 const std::string& app_id, | 104 const std::string& app_id, |
101 bool is_primary_selector); | 105 bool is_primary_selector); |
102 ~WebAppFileSelector(); | 106 ~WebAppFileSelector(); |
103 // WebApp product link. | 107 // WebApp product link. |
104 GURL product_link; | 108 GURL product_link; |
105 // Drive application icon URLs for this app, paired with their size (length | 109 // Drive application icon URLs for this app, paired with their size (length |
106 // of a side in pixels). | 110 // of a side in pixels). |
107 InstalledApp::IconList app_icons; | 111 gdata::InstalledApp::IconList app_icons; |
108 // Drive document icon URLs for this app, paired with their size (length of | 112 // Drive document icon URLs for this app, paired with their size (length of |
109 // a side in pixels). | 113 // a side in pixels). |
110 InstalledApp::IconList document_icons; | 114 gdata::InstalledApp::IconList document_icons; |
111 // Object (file) type description. | 115 // Object (file) type description. |
112 string16 object_type; | 116 string16 object_type; |
113 // Drive app id | 117 // Drive app id |
114 std::string app_id; | 118 std::string app_id; |
115 // True if the selector is the default one. The default selector should | 119 // True if the selector is the default one. The default selector should |
116 // trigger on file double-click events. Non-default selectors only show up | 120 // trigger on file double-click events. Non-default selectors only show up |
117 // in "Open with..." pop-up menu. | 121 // in "Open with..." pop-up menu. |
118 bool is_primary_selector; | 122 bool is_primary_selector; |
119 }; | 123 }; |
120 | 124 |
121 // Defines mapping between file content type selectors (extensions, MIME | 125 // Defines mapping between file content type selectors (extensions, MIME |
122 // types) and corresponding WebApp. | 126 // types) and corresponding WebApp. |
123 typedef std::multimap<std::string, WebAppFileSelector*> WebAppFileSelectorMap; | 127 typedef std::multimap<std::string, WebAppFileSelector*> WebAppFileSelectorMap; |
124 | 128 |
125 // Helper map used for deduplication of selector matching results. | 129 // Helper map used for deduplication of selector matching results. |
126 typedef std::map<const WebAppFileSelector*, | 130 typedef std::map<const WebAppFileSelector*, |
127 DriveWebAppInfo*> SelectorWebAppList; | 131 DriveWebAppInfo*> SelectorWebAppList; |
128 | 132 |
129 // Helper function for loading web application file |selectors| into | 133 // Helper function for loading web application file |selectors| into |
130 // corresponding |map|. | 134 // corresponding |map|. |
131 static void AddAppSelectorList(const GURL& product_link, | 135 static void AddAppSelectorList( |
132 const InstalledApp::IconList& app_icons, | 136 const GURL& product_link, |
133 const InstalledApp::IconList& document_icons, | 137 const gdata::InstalledApp::IconList& app_icons, |
134 const string16& object_type, | 138 const gdata::InstalledApp::IconList& document_icons, |
135 const std::string& app_id, | 139 const string16& object_type, |
136 bool is_primary_selector, | 140 const std::string& app_id, |
137 const ScopedVector<std::string>& selectors, | 141 bool is_primary_selector, |
138 WebAppFileSelectorMap* map); | 142 const ScopedVector<std::string>& selectors, |
| 143 WebAppFileSelectorMap* map); |
139 | 144 |
140 // Finds matching |apps| from |map| based on provided file |selector|. | 145 // Finds matching |apps| from |map| based on provided file |selector|. |
141 void FindWebAppsForSelector(const std::string& selector, | 146 void FindWebAppsForSelector(const std::string& selector, |
142 const WebAppFileSelectorMap& map, | 147 const WebAppFileSelectorMap& map, |
143 SelectorWebAppList* apps); | 148 SelectorWebAppList* apps); |
144 | 149 |
145 // Map of web store product URL to application name. | 150 // Map of web store product URL to application name. |
146 std::map<GURL, string16> url_to_name_map_; | 151 std::map<GURL, string16> url_to_name_map_; |
147 | 152 |
148 // Map of filename extension to application info. | 153 // Map of filename extension to application info. |
149 WebAppFileSelectorMap webapp_extension_map_; | 154 WebAppFileSelectorMap webapp_extension_map_; |
150 | 155 |
151 // Map of MIME type to application info. | 156 // Map of MIME type to application info. |
152 WebAppFileSelectorMap webapp_mimetypes_map_; | 157 WebAppFileSelectorMap webapp_mimetypes_map_; |
153 | 158 |
154 DISALLOW_COPY_AND_ASSIGN(DriveWebAppsRegistry); | 159 DISALLOW_COPY_AND_ASSIGN(DriveWebAppsRegistry); |
155 }; | 160 }; |
156 | 161 |
157 } // namespace gdata | 162 } // namespace drive |
158 | 163 |
159 #endif // CHROME_BROWSER_CHROMEOS_DRIVE_DRIVE_WEBAPPS_REGISTRY_H_ | 164 #endif // CHROME_BROWSER_CHROMEOS_DRIVE_DRIVE_WEBAPPS_REGISTRY_H_ |
OLD | NEW |