OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/app_mode/kiosk_app_data.h" | 5 #include "chrome/browser/chromeos/app_mode/kiosk_app_data.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
242 DISALLOW_COPY_AND_ASSIGN(WebstoreDataParser); | 242 DISALLOW_COPY_AND_ASSIGN(WebstoreDataParser); |
243 }; | 243 }; |
244 | 244 |
245 //////////////////////////////////////////////////////////////////////////////// | 245 //////////////////////////////////////////////////////////////////////////////// |
246 // KioskAppData | 246 // KioskAppData |
247 | 247 |
248 KioskAppData::KioskAppData(KioskAppDataDelegate* delegate, | 248 KioskAppData::KioskAppData(KioskAppDataDelegate* delegate, |
249 const std::string& app_id) | 249 const std::string& app_id) |
250 : delegate_(delegate), | 250 : delegate_(delegate), |
251 status_(STATUS_INIT), | 251 status_(STATUS_INIT), |
252 id_(app_id) { | 252 app_id_(app_id) { |
253 } | 253 } |
254 | 254 |
255 KioskAppData::~KioskAppData() {} | 255 KioskAppData::~KioskAppData() {} |
256 | 256 |
257 void KioskAppData::Load() { | 257 void KioskAppData::Load() { |
258 SetStatus(STATUS_LOADING); | 258 SetStatus(STATUS_LOADING); |
259 | 259 |
260 if (LoadFromCache()) | 260 if (LoadFromCache()) |
261 return; | 261 return; |
262 | 262 |
263 StartFetch(); | 263 StartFetch(); |
264 } | 264 } |
265 | 265 |
266 void KioskAppData::ClearCache() { | 266 void KioskAppData::ClearCache() { |
267 PrefService* local_state = g_browser_process->local_state(); | 267 PrefService* local_state = g_browser_process->local_state(); |
268 | 268 |
269 DictionaryPrefUpdate dict_update(local_state, | 269 DictionaryPrefUpdate dict_update(local_state, |
270 KioskAppManager::kKioskDictionaryName); | 270 KioskAppManager::kKioskDictionaryName); |
271 | 271 |
272 std::string app_key = std::string(KioskAppManager::kKeyApps) + '.' + id_; | 272 std::string app_key = std::string(KioskAppManager::kKeyApps) + '.' + app_id_; |
273 dict_update->Remove(app_key, NULL); | 273 dict_update->Remove(app_key, NULL); |
274 | 274 |
275 if (!icon_path_.empty()) { | 275 if (!icon_path_.empty()) { |
276 BrowserThread::PostBlockingPoolTask( | 276 BrowserThread::PostBlockingPoolTask( |
277 FROM_HERE, | 277 FROM_HERE, |
278 base::Bind(base::IgnoreResult(&file_util::Delete), icon_path_, false)); | 278 base::Bind(base::IgnoreResult(&file_util::Delete), icon_path_, false)); |
279 } | 279 } |
280 } | 280 } |
281 | 281 |
282 bool KioskAppData::IsLoading() const { | 282 bool KioskAppData::IsLoading() const { |
283 return status_ == STATUS_LOADING; | 283 return status_ == STATUS_LOADING; |
284 } | 284 } |
285 | 285 |
286 void KioskAppData::SetStatus(Status status) { | 286 void KioskAppData::SetStatus(Status status) { |
287 if (status_ == status) | 287 if (status_ == status) |
288 return; | 288 return; |
289 | 289 |
290 status_ = status; | 290 status_ = status; |
291 | 291 |
292 if (!delegate_) | 292 if (!delegate_) |
293 return; | 293 return; |
294 | 294 |
295 switch (status_) { | 295 switch (status_) { |
296 case STATUS_INIT: | 296 case STATUS_INIT: |
297 break; | 297 break; |
298 case STATUS_LOADING: | 298 case STATUS_LOADING: |
299 case STATUS_LOADED: | 299 case STATUS_LOADED: |
300 delegate_->OnKioskAppDataChanged(id_); | 300 delegate_->OnKioskAppDataChanged(app_id_); |
301 break; | 301 break; |
302 case STATUS_ERROR: | 302 case STATUS_ERROR: |
303 delegate_->OnKioskAppDataLoadFailure(id_); | 303 delegate_->OnKioskAppDataLoadFailure(app_id_); |
304 break; | 304 break; |
305 }; | 305 }; |
306 } | 306 } |
307 | 307 |
308 net::URLRequestContextGetter* KioskAppData::GetRequestContextGetter() { | 308 net::URLRequestContextGetter* KioskAppData::GetRequestContextGetter() { |
309 return g_browser_process->system_request_context(); | 309 return g_browser_process->system_request_context(); |
310 } | 310 } |
311 | 311 |
312 bool KioskAppData::LoadFromCache() { | 312 bool KioskAppData::LoadFromCache() { |
313 std::string app_key = std::string(KioskAppManager::kKeyApps) + '.' + id_; | 313 std::string app_key = std::string(KioskAppManager::kKeyApps) + '.' + app_id_; |
314 std::string name_key = app_key + '.' + kKeyName; | 314 std::string name_key = app_key + '.' + kKeyName; |
315 std::string icon_path_key = app_key + '.' + kKeyIcon; | 315 std::string icon_path_key = app_key + '.' + kKeyIcon; |
316 | 316 |
317 PrefService* local_state = g_browser_process->local_state(); | 317 PrefService* local_state = g_browser_process->local_state(); |
318 const base::DictionaryValue* dict = | 318 const base::DictionaryValue* dict = |
319 local_state->GetDictionary(KioskAppManager::kKioskDictionaryName); | 319 local_state->GetDictionary(KioskAppManager::kKioskDictionaryName); |
320 | 320 |
321 icon_path_.clear(); | 321 icon_path_.clear(); |
322 std::string icon_path_string; | 322 std::string icon_path_string; |
323 if (!dict->GetString(name_key, &name_) || | 323 if (!dict->GetString(name_key, &name_) || |
324 !dict->GetString(icon_path_key, &icon_path_string)) { | 324 !dict->GetString(icon_path_key, &icon_path_string)) { |
325 return false; | 325 return false; |
326 } | 326 } |
327 icon_path_ = base::FilePath(icon_path_string); | 327 icon_path_ = base::FilePath(icon_path_string); |
328 | 328 |
329 // IconLoader deletes itself when done. | 329 // IconLoader deletes itself when done. |
330 (new IconLoader(AsWeakPtr(), icon_path_))->Start(); | 330 (new IconLoader(AsWeakPtr(), icon_path_))->Start(); |
331 return true; | 331 return true; |
332 } | 332 } |
333 | 333 |
334 void KioskAppData::SetCache(const std::string& name, | 334 void KioskAppData::SetCache(const std::string& name, |
335 const base::FilePath& icon_path) { | 335 const base::FilePath& icon_path) { |
336 std::string app_key = std::string(KioskAppManager::kKeyApps) + '.' + id_; | 336 std::string app_key = std::string(KioskAppManager::kKeyApps) + '.' + app_id_; |
337 std::string name_key = app_key + '.' + kKeyName; | 337 std::string name_key = app_key + '.' + kKeyName; |
338 std::string icon_path_key = app_key + '.' + kKeyIcon; | 338 std::string icon_path_key = app_key + '.' + kKeyIcon; |
339 | 339 |
340 PrefService* local_state = g_browser_process->local_state(); | 340 PrefService* local_state = g_browser_process->local_state(); |
341 DictionaryPrefUpdate dict_update(local_state, | 341 DictionaryPrefUpdate dict_update(local_state, |
342 KioskAppManager::kKioskDictionaryName); | 342 KioskAppManager::kKioskDictionaryName); |
343 dict_update->SetString(name_key, name); | 343 dict_update->SetString(name_key, name); |
344 dict_update->SetString(icon_path_key, icon_path.value()); | 344 dict_update->SetString(icon_path_key, icon_path.value()); |
345 icon_path_ = icon_path; | 345 icon_path_ = icon_path; |
346 } | 346 } |
(...skipping 19 matching lines...) Expand all Loading... |
366 std::vector<unsigned char> image_data; | 366 std::vector<unsigned char> image_data; |
367 CHECK(gfx::PNGCodec::EncodeBGRASkBitmap(icon, false, &image_data)); | 367 CHECK(gfx::PNGCodec::EncodeBGRASkBitmap(icon, false, &image_data)); |
368 raw_icon_ = new base::RefCountedString; | 368 raw_icon_ = new base::RefCountedString; |
369 raw_icon_->data().assign(image_data.begin(), image_data.end()); | 369 raw_icon_->data().assign(image_data.begin(), image_data.end()); |
370 | 370 |
371 base::FilePath cache_dir; | 371 base::FilePath cache_dir; |
372 if (delegate_) | 372 if (delegate_) |
373 delegate_->GetKioskAppIconCacheDir(&cache_dir); | 373 delegate_->GetKioskAppIconCacheDir(&cache_dir); |
374 | 374 |
375 base::FilePath icon_path = | 375 base::FilePath icon_path = |
376 cache_dir.AppendASCII(id_).AddExtension(kIconFileExtension); | 376 cache_dir.AppendASCII(app_id_).AddExtension(kIconFileExtension); |
377 BrowserThread::GetBlockingPool()->PostTask( | 377 BrowserThread::GetBlockingPool()->PostTask( |
378 FROM_HERE, | 378 FROM_HERE, |
379 base::Bind(&SaveIconToLocalOnBlockingPool, icon_path, raw_icon_)); | 379 base::Bind(&SaveIconToLocalOnBlockingPool, icon_path, raw_icon_)); |
380 | 380 |
381 SetCache(name_, icon_path); | 381 SetCache(name_, icon_path); |
382 SetStatus(STATUS_LOADED); | 382 SetStatus(STATUS_LOADED); |
383 } | 383 } |
384 | 384 |
385 void KioskAppData::OnWebstoreParseFailure() { | 385 void KioskAppData::OnWebstoreParseFailure() { |
386 SetStatus(STATUS_ERROR); | 386 SetStatus(STATUS_ERROR); |
387 } | 387 } |
388 | 388 |
389 void KioskAppData::StartFetch() { | 389 void KioskAppData::StartFetch() { |
390 webstore_fetcher_.reset(new extensions::WebstoreDataFetcher( | 390 webstore_fetcher_.reset(new extensions::WebstoreDataFetcher( |
391 this, | 391 this, |
392 GetRequestContextGetter(), | 392 GetRequestContextGetter(), |
393 GURL(), | 393 GURL(), |
394 id_)); | 394 app_id_)); |
395 webstore_fetcher_->Start(); | 395 webstore_fetcher_->Start(); |
396 } | 396 } |
397 | 397 |
398 void KioskAppData::OnWebstoreRequestFailure() { | 398 void KioskAppData::OnWebstoreRequestFailure() { |
399 SetStatus(STATUS_ERROR); | 399 SetStatus(STATUS_ERROR); |
400 } | 400 } |
401 | 401 |
402 void KioskAppData::OnWebstoreResponseParseSuccess( | 402 void KioskAppData::OnWebstoreResponseParseSuccess( |
403 base::DictionaryValue* webstore_data) { | 403 base::DictionaryValue* webstore_data) { |
404 // Takes ownership of |webstore_data|. | 404 // Takes ownership of |webstore_data|. |
(...skipping 18 matching lines...) Expand all Loading... |
423 return; | 423 return; |
424 } | 424 } |
425 GURL icon_url = GURL(extension_urls::GetWebstoreLaunchURL()).Resolve( | 425 GURL icon_url = GURL(extension_urls::GetWebstoreLaunchURL()).Resolve( |
426 icon_url_string); | 426 icon_url_string); |
427 if (!icon_url.is_valid()) { | 427 if (!icon_url.is_valid()) { |
428 OnWebstoreResponseParseFailure(kInvalidWebstoreResponseError); | 428 OnWebstoreResponseParseFailure(kInvalidWebstoreResponseError); |
429 return; | 429 return; |
430 } | 430 } |
431 | 431 |
432 // WebstoreDataParser deletes itself when done. | 432 // WebstoreDataParser deletes itself when done. |
433 (new WebstoreDataParser(AsWeakPtr()))->Start(id_, | 433 (new WebstoreDataParser(AsWeakPtr()))->Start(app_id_, |
434 manifest, | 434 manifest, |
435 icon_url, | 435 icon_url, |
436 GetRequestContextGetter()); | 436 GetRequestContextGetter()); |
437 } | 437 } |
438 | 438 |
439 void KioskAppData::OnWebstoreResponseParseFailure(const std::string& error) { | 439 void KioskAppData::OnWebstoreResponseParseFailure(const std::string& error) { |
440 webstore_fetcher_.reset(); | 440 webstore_fetcher_.reset(); |
441 SetStatus(STATUS_ERROR); | 441 SetStatus(STATUS_ERROR); |
442 } | 442 } |
443 | 443 |
444 } // namespace chromeos | 444 } // namespace chromeos |
OLD | NEW |