Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(889)

Side by Side Diff: chrome/browser/chromeos/drive/drive_app_registry.cc

Issue 15932010: drive: Rename DriveWebApp* to DriveApp (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: address comments Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 #include "chrome/browser/chromeos/drive/drive_webapps_registry.h" 5 #include "chrome/browser/chromeos/drive/drive_app_registry.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/files/file_path.h" 12 #include "base/files/file_path.h"
13 #include "base/string_util.h" 13 #include "base/string_util.h"
14 #include "base/utf_string_conversions.h" 14 #include "base/utf_string_conversions.h"
15 #include "chrome/browser/chromeos/drive/file_system_util.h" 15 #include "chrome/browser/chromeos/drive/file_system_util.h"
16 #include "chrome/browser/chromeos/drive/job_scheduler.h" 16 #include "chrome/browser/chromeos/drive/job_scheduler.h"
17 #include "chrome/browser/google_apis/drive_api_parser.h" 17 #include "chrome/browser/google_apis/drive_api_parser.h"
18 #include "content/public/browser/browser_thread.h" 18 #include "content/public/browser/browser_thread.h"
19 19
20 using content::BrowserThread; 20 using content::BrowserThread;
21 21
22 namespace drive { 22 namespace drive {
23 23
24 namespace { 24 namespace {
25 25
26 // WebApp store URL prefix. 26 // Webstore URL prefix.
27 const char kStoreProductUrl[] = "https://chrome.google.com/webstore/"; 27 const char kStoreProductUrl[] = "https://chrome.google.com/webstore/";
28 28
29 // Extracts Web store id from its web store URL. 29 // Extracts Web store id from its web store URL.
30 std::string GetWebStoreIdFromUrl(const GURL& url) { 30 std::string GetWebStoreIdFromUrl(const GURL& url) {
31 if (!StartsWithASCII(url.spec(), kStoreProductUrl, false)) { 31 if (!StartsWithASCII(url.spec(), kStoreProductUrl, false)) {
32 LOG(WARNING) << "Unrecognized product URL " << url.spec(); 32 LOG(WARNING) << "Unrecognized product URL " << url.spec();
33 return std::string(); 33 return std::string();
34 } 34 }
35 35
36 base::FilePath path(url.path()); 36 base::FilePath path(url.path());
37 std::vector<base::FilePath::StringType> components; 37 std::vector<base::FilePath::StringType> components;
38 path.GetComponents(&components); 38 path.GetComponents(&components);
39 DCHECK_LE(2U, components.size()); // Coming from kStoreProductUrl 39 DCHECK_LE(2U, components.size()); // Coming from kStoreProductUrl
40 40
41 // Return the last part of the path 41 // Return the last part of the path
42 return components[components.size() - 1]; 42 return components[components.size() - 1];
43 } 43 }
44 44
45 // TODO(kochi): This is duplicate from gdata_wapi_parser.cc. 45 // TODO(kochi): This is duplicate from gdata_wapi_parser.cc.
46 bool SortBySize(const google_apis::InstalledApp::IconList::value_type& a, 46 bool SortBySize(const google_apis::InstalledApp::IconList::value_type& a,
47 const google_apis::InstalledApp::IconList::value_type& b) { 47 const google_apis::InstalledApp::IconList::value_type& b) {
48 return a.first < b.first; 48 return a.first < b.first;
49 } 49 }
50 50
51 } // namespace 51 } // namespace
52 52
53 // DriveWebAppInfo struct implementation. 53 // DriveAppInfo struct implementation.
54 54
55 DriveWebAppInfo::DriveWebAppInfo( 55 DriveAppInfo::DriveAppInfo(
56 const std::string& app_id, 56 const std::string& app_id,
57 const google_apis::InstalledApp::IconList& app_icons, 57 const google_apis::InstalledApp::IconList& app_icons,
58 const google_apis::InstalledApp::IconList& document_icons, 58 const google_apis::InstalledApp::IconList& document_icons,
59 const std::string& web_store_id, 59 const std::string& web_store_id,
60 const string16& app_name, 60 const string16& app_name,
61 const string16& object_type, 61 const string16& object_type,
62 bool is_primary_selector) 62 bool is_primary_selector)
63 : app_id(app_id), 63 : app_id(app_id),
64 app_icons(app_icons), 64 app_icons(app_icons),
65 document_icons(document_icons), 65 document_icons(document_icons),
66 web_store_id(web_store_id), 66 web_store_id(web_store_id),
67 app_name(app_name), 67 app_name(app_name),
68 object_type(object_type), 68 object_type(object_type),
69 is_primary_selector(is_primary_selector) { 69 is_primary_selector(is_primary_selector) {
70 } 70 }
71 71
72 DriveWebAppInfo::~DriveWebAppInfo() { 72 DriveAppInfo::~DriveAppInfo() {
73 } 73 }
74 74
75 // FileSystem::WebAppFileSelector struct implementation. 75 // FileSystem::DriveAppFileSelector struct implementation.
76 76
77 DriveWebAppsRegistry::WebAppFileSelector::WebAppFileSelector( 77 DriveAppRegistry::DriveAppFileSelector::DriveAppFileSelector(
78 const GURL& product_link, 78 const GURL& product_link,
79 const google_apis::InstalledApp::IconList& app_icons, 79 const google_apis::InstalledApp::IconList& app_icons,
80 const google_apis::InstalledApp::IconList& document_icons, 80 const google_apis::InstalledApp::IconList& document_icons,
81 const string16& object_type, 81 const string16& object_type,
82 const std::string& app_id, 82 const std::string& app_id,
83 bool is_primary_selector) 83 bool is_primary_selector)
84 : product_link(product_link), 84 : product_link(product_link),
85 app_icons(app_icons), 85 app_icons(app_icons),
86 document_icons(document_icons), 86 document_icons(document_icons),
87 object_type(object_type), 87 object_type(object_type),
88 app_id(app_id), 88 app_id(app_id),
89 is_primary_selector(is_primary_selector) { 89 is_primary_selector(is_primary_selector) {
90 } 90 }
91 91
92 DriveWebAppsRegistry::WebAppFileSelector::~WebAppFileSelector() { 92 DriveAppRegistry::DriveAppFileSelector::~DriveAppFileSelector() {
93 } 93 }
94 94
95 // DriveWebAppsRegistry implementation. 95 // DriveAppRegistry implementation.
96 96
97 DriveWebAppsRegistry::DriveWebAppsRegistry(JobScheduler* scheduler) 97 DriveAppRegistry::DriveAppRegistry(JobScheduler* scheduler)
98 : scheduler_(scheduler), 98 : scheduler_(scheduler),
99 weak_ptr_factory_(this) { 99 weak_ptr_factory_(this) {
100 } 100 }
101 101
102 DriveWebAppsRegistry::~DriveWebAppsRegistry() { 102 DriveAppRegistry::~DriveAppRegistry() {
103 STLDeleteValues(&webapp_extension_map_); 103 STLDeleteValues(&app_extension_map_);
104 STLDeleteValues(&webapp_mimetypes_map_); 104 STLDeleteValues(&app_mimetypes_map_);
105 } 105 }
106 106
107 void DriveWebAppsRegistry::GetWebAppsForFile( 107 void DriveAppRegistry::GetAppsForFile(
108 const base::FilePath& file, 108 const base::FilePath& file_path,
109 const std::string& mime_type, 109 const std::string& mime_type,
110 ScopedVector<DriveWebAppInfo>* apps) { 110 ScopedVector<DriveAppInfo>* apps) {
111 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 111 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
112 112
113 SelectorWebAppList result_map; 113 SelectorAppList result_map;
114 if (!file.empty()) { 114 if (!file_path.empty()) {
115 base::FilePath::StringType extension = file.Extension(); 115 base::FilePath::StringType extension = file_path.Extension();
116 if (extension.size() < 2) 116 if (extension.size() < 2)
117 return; 117 return;
118 118
119 extension = extension.substr(1); 119 extension = extension.substr(1);
120 if (!extension.empty()) 120 if (!extension.empty())
121 FindWebAppsForSelector(extension, webapp_extension_map_, &result_map); 121 FindAppsForSelector(extension, app_extension_map_, &result_map);
122 } 122 }
123 123
124 if (!mime_type.empty()) 124 if (!mime_type.empty())
125 FindWebAppsForSelector(mime_type, webapp_mimetypes_map_, &result_map); 125 FindAppsForSelector(mime_type, app_mimetypes_map_, &result_map);
126 126
127 // Insert found web apps into |apps|, but skip duplicate results. 127 // Insert found web apps into |apps|, but skip duplicate results.
128 std::set<std::string> inserted_app_ids; 128 std::set<std::string> inserted_app_ids;
129 for (SelectorWebAppList::const_iterator it = result_map.begin(); 129 for (SelectorAppList::const_iterator it = result_map.begin();
130 it != result_map.end(); ++it) { 130 it != result_map.end(); ++it) {
131 if (inserted_app_ids.find(it->second->app_id) == inserted_app_ids.end()) { 131 if (inserted_app_ids.find(it->second->app_id) == inserted_app_ids.end()) {
132 inserted_app_ids.insert(it->second->app_id); 132 inserted_app_ids.insert(it->second->app_id);
133 apps->push_back(it->second); 133 apps->push_back(it->second);
134 } 134 }
135 } 135 }
136 } 136 }
137 137
138 void DriveWebAppsRegistry::Update() { 138 void DriveAppRegistry::Update() {
139 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 139 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
140 140
141 scheduler_->GetAppList( 141 scheduler_->GetAppList(
142 base::Bind(&DriveWebAppsRegistry::UpdateAfterGetAppList, 142 base::Bind(&DriveAppRegistry::UpdateAfterGetAppList,
143 weak_ptr_factory_.GetWeakPtr())); 143 weak_ptr_factory_.GetWeakPtr()));
144 } 144 }
145 145
146 void DriveWebAppsRegistry::UpdateAfterGetAppList( 146 void DriveAppRegistry::UpdateAfterGetAppList(
147 google_apis::GDataErrorCode gdata_error, 147 google_apis::GDataErrorCode gdata_error,
148 scoped_ptr<google_apis::AppList> app_list) { 148 scoped_ptr<google_apis::AppList> app_list) {
149 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 149 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
150 150
151 FileError error = util::GDataToFileError(gdata_error); 151 FileError error = util::GDataToFileError(gdata_error);
152 if (error != FILE_ERROR_OK) { 152 if (error != FILE_ERROR_OK) {
153 // Failed to fetch the data from the server. We can do nothing here. 153 // Failed to fetch the data from the server. We can do nothing here.
154 return; 154 return;
155 } 155 }
156 156
157 DCHECK(app_list); 157 DCHECK(app_list);
158 158
159 url_to_name_map_.clear(); 159 url_to_name_map_.clear();
160 STLDeleteValues(&webapp_extension_map_); 160 STLDeleteValues(&app_extension_map_);
161 STLDeleteValues(&webapp_mimetypes_map_); 161 STLDeleteValues(&app_mimetypes_map_);
162 for (size_t i = 0; i < app_list->items().size(); ++i) { 162 for (size_t i = 0; i < app_list->items().size(); ++i) {
163 const google_apis::AppResource& app = *app_list->items()[i]; 163 const google_apis::AppResource& app = *app_list->items()[i];
164 if (app.product_url().is_empty()) 164 if (app.product_url().is_empty())
165 continue; 165 continue;
166 166
167 google_apis::InstalledApp::IconList app_icons; 167 google_apis::InstalledApp::IconList app_icons;
168 google_apis::InstalledApp::IconList document_icons; 168 google_apis::InstalledApp::IconList document_icons;
169 for (size_t j = 0; j < app.icons().size(); ++j) { 169 for (size_t j = 0; j < app.icons().size(); ++j) {
170 const google_apis::DriveAppIcon& icon = *app.icons()[j]; 170 const google_apis::DriveAppIcon& icon = *app.icons()[j];
171 if (icon.icon_url().is_empty()) 171 if (icon.icon_url().is_empty())
(...skipping 10 matching lines...) Expand all
182 182
183 url_to_name_map_.insert( 183 url_to_name_map_.insert(
184 std::make_pair(app.product_url(), app.name())); 184 std::make_pair(app.product_url(), app.name()));
185 AddAppSelectorList(app.product_url(), 185 AddAppSelectorList(app.product_url(),
186 app_icons, 186 app_icons,
187 document_icons, 187 document_icons,
188 app.object_type(), 188 app.object_type(),
189 app.application_id(), 189 app.application_id(),
190 true, // primary 190 true, // primary
191 app.primary_mimetypes(), 191 app.primary_mimetypes(),
192 &webapp_mimetypes_map_); 192 &app_mimetypes_map_);
193 AddAppSelectorList(app.product_url(), 193 AddAppSelectorList(app.product_url(),
194 app_icons, 194 app_icons,
195 document_icons, 195 document_icons,
196 app.object_type(), 196 app.object_type(),
197 app.application_id(), 197 app.application_id(),
198 false, // primary 198 false, // primary
199 app.secondary_mimetypes(), 199 app.secondary_mimetypes(),
200 &webapp_mimetypes_map_); 200 &app_mimetypes_map_);
201 AddAppSelectorList(app.product_url(), 201 AddAppSelectorList(app.product_url(),
202 app_icons, 202 app_icons,
203 document_icons, 203 document_icons,
204 app.object_type(), 204 app.object_type(),
205 app.application_id(), 205 app.application_id(),
206 true, // primary 206 true, // primary
207 app.primary_file_extensions(), 207 app.primary_file_extensions(),
208 &webapp_extension_map_); 208 &app_extension_map_);
209 AddAppSelectorList(app.product_url(), 209 AddAppSelectorList(app.product_url(),
210 app_icons, 210 app_icons,
211 document_icons, 211 document_icons,
212 app.object_type(), 212 app.object_type(),
213 app.application_id(), 213 app.application_id(),
214 false, // primary 214 false, // primary
215 app.secondary_file_extensions(), 215 app.secondary_file_extensions(),
216 &webapp_extension_map_); 216 &app_extension_map_);
217 } 217 }
218 } 218 }
219 219
220 // static. 220 // static.
221 void DriveWebAppsRegistry::AddAppSelectorList( 221 void DriveAppRegistry::AddAppSelectorList(
222 const GURL& product_link, 222 const GURL& product_link,
223 const google_apis::InstalledApp::IconList& app_icons, 223 const google_apis::InstalledApp::IconList& app_icons,
224 const google_apis::InstalledApp::IconList& document_icons, 224 const google_apis::InstalledApp::IconList& document_icons,
225 const std::string& object_type, 225 const std::string& object_type,
226 const std::string& app_id, 226 const std::string& app_id,
227 bool is_primary_selector, 227 bool is_primary_selector,
228 const ScopedVector<std::string>& selectors, 228 const ScopedVector<std::string>& selectors,
229 WebAppFileSelectorMap* map) { 229 DriveAppFileSelectorMap* map) {
230 for (ScopedVector<std::string>::const_iterator it = selectors.begin(); 230 for (ScopedVector<std::string>::const_iterator it = selectors.begin();
231 it != selectors.end(); ++it) { 231 it != selectors.end(); ++it) {
232 std::string* value = *it; 232 std::string* value = *it;
233 map->insert(std::make_pair( 233 map->insert(std::make_pair(
234 *value, new WebAppFileSelector(product_link, 234 *value, new DriveAppFileSelector(product_link,
235 app_icons, 235 app_icons,
236 document_icons, 236 document_icons,
237 UTF8ToUTF16(object_type), 237 UTF8ToUTF16(object_type),
238 app_id, 238 app_id,
239 is_primary_selector))); 239 is_primary_selector)));
240 } 240 }
241 } 241 }
242 242
243 void DriveWebAppsRegistry::FindWebAppsForSelector( 243 void DriveAppRegistry::FindAppsForSelector(
244 const std::string& file_selector, 244 const std::string& file_selector,
245 const WebAppFileSelectorMap& map, 245 const DriveAppFileSelectorMap& map,
246 SelectorWebAppList* apps) { 246 SelectorAppList* apps) {
247 for (WebAppFileSelectorMap::const_iterator it = map.find(file_selector); 247 for (DriveAppFileSelectorMap::const_iterator it = map.find(file_selector);
248 it != map.end() && it->first == file_selector; ++it) { 248 it != map.end() && it->first == file_selector; ++it) {
249 const WebAppFileSelector* web_app = it->second; 249 const DriveAppFileSelector* web_app = it->second;
250 std::map<GURL, std::string>::const_iterator product_iter = 250 std::map<GURL, std::string>::const_iterator product_iter =
251 url_to_name_map_.find(web_app->product_link); 251 url_to_name_map_.find(web_app->product_link);
252 if (product_iter == url_to_name_map_.end()) { 252 if (product_iter == url_to_name_map_.end()) {
253 NOTREACHED(); 253 NOTREACHED();
254 continue; 254 continue;
255 } 255 }
256 256
257 std::string web_store_id = GetWebStoreIdFromUrl(web_app->product_link); 257 std::string web_store_id = GetWebStoreIdFromUrl(web_app->product_link);
258 if (web_store_id.empty()) 258 if (web_store_id.empty())
259 continue; 259 continue;
260 260
261 if (apps->find(web_app) != apps->end()) 261 if (apps->find(web_app) != apps->end())
262 continue; 262 continue;
263 263
264 apps->insert(std::make_pair( 264 apps->insert(std::make_pair(
265 web_app, 265 web_app,
266 new DriveWebAppInfo(web_app->app_id, 266 new DriveAppInfo(web_app->app_id,
267 web_app->app_icons, 267 web_app->app_icons,
268 web_app->document_icons, 268 web_app->document_icons,
269 web_store_id, 269 web_store_id,
270 UTF8ToUTF16(product_iter->second), // app name. 270 UTF8ToUTF16(product_iter->second), // app name.
271 web_app->object_type, 271 web_app->object_type,
272 web_app->is_primary_selector))); 272 web_app->is_primary_selector)));
273 } 273 }
274 } 274 }
275 275
276 } // namespace drive 276 } // namespace drive
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/drive/drive_app_registry.h ('k') | chrome/browser/chromeos/drive/drive_app_registry_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698