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 3 // found in the LICENSE file. 4 5 #include "chrome/browser/browsing_data/browsing_data_flash_lso_helper.h" 6 7 #include <limits> 8 #include <map> 9 10 #include "base/callback.h" 11 #include "base/logging.h" 12 #include "chrome/browser/pepper_flash_settings_manager.h" 13 14 namespace { 15 16 class BrowsingDataFlashLSOHelperImpl 17 : public BrowsingDataFlashLSOHelper, 18 public PepperFlashSettingsManager::Client { 19 public: 20 explicit BrowsingDataFlashLSOHelperImpl( 21 content::BrowserContext* browser_context); 22 23 // BrowsingDataFlashLSOHelper implementation: 24 virtual void StartFetching( 25 const GetSitesWithFlashDataCallback& callback) OVERRIDE; 26 virtual void DeleteFlashLSOsForSite(const std::string& site) OVERRIDE; 27 28 // PepperFlashSettingsManager::Client overrides: 29 virtual void OnGetSitesWithDataCompleted( 30 uint32 request_id, 31 const std::vector<std::string>& sites) OVERRIDE; 32 virtual void OnClearSiteDataCompleted( 33 uint32 request_id, 34 bool success) OVERRIDE; 35 36 private: 37 virtual ~BrowsingDataFlashLSOHelperImpl(); 38 39 // Asynchronously fetches and deletes data and calls us back. 40 PepperFlashSettingsManager settings_manager_; 41 42 // Identifies the request to fetch site data. 43 uint32 get_sites_with_data_request_id_; 44 45 // Contains the pending requests to clear site data. The key is the request 46 // ID, the value the site for which to clear data. 47 std::map<uint32, std::string> clear_site_data_ids_; 48 49 // Called when we have fetched the list of sites. 50 GetSitesWithFlashDataCallback callback_; 51 52 DISALLOW_COPY_AND_ASSIGN(BrowsingDataFlashLSOHelperImpl); 53 }; 54 55 BrowsingDataFlashLSOHelperImpl::BrowsingDataFlashLSOHelperImpl( 56 content::BrowserContext* browser_context) 57 : settings_manager_(this, browser_context), 58 get_sites_with_data_request_id_(0u) { 59 } 60 61 BrowsingDataFlashLSOHelperImpl::~BrowsingDataFlashLSOHelperImpl() { 62 } 63 64 void BrowsingDataFlashLSOHelperImpl::StartFetching( 65 const GetSitesWithFlashDataCallback& callback) { 66 DCHECK(callback_.is_null()); 67 callback_ = callback; 68 get_sites_with_data_request_id_ = settings_manager_.GetSitesWithData(); 69 } 70 71 void BrowsingDataFlashLSOHelperImpl::DeleteFlashLSOsForSite( 72 const std::string& site) { 73 const uint64 kClearAllData = 0; 74 uint32 id = settings_manager_.ClearSiteData( 75 site, kClearAllData, std::numeric_limits<uint64>::max()); 76 clear_site_data_ids_[id] = site; 77 } 78 79 void BrowsingDataFlashLSOHelperImpl::OnGetSitesWithDataCompleted( 80 uint32 request_id, 81 const std::vector<std::string>& sites) { 82 DCHECK_EQ(get_sites_with_data_request_id_, request_id); 83 callback_.Run(sites); 84 callback_ = GetSitesWithFlashDataCallback(); 85 } 86 87 void BrowsingDataFlashLSOHelperImpl::OnClearSiteDataCompleted(uint32 request_id, 88 bool success) { 89 std::map<uint32, std::string>::iterator entry = 90 clear_site_data_ids_.find(request_id); 91 DCHECK(entry != clear_site_data_ids_.end()); 92 LOG_IF(ERROR, !success) << "Couldn't clear Flash LSO data for " 93 << entry->second; 94 clear_site_data_ids_.erase(entry); 95 } 96 97 } // namespace 98 99 // static 100 BrowsingDataFlashLSOHelper* BrowsingDataFlashLSOHelper::Create( 101 content::BrowserContext* browser_context) { 102 return new BrowsingDataFlashLSOHelperImpl(browser_context); 103 } 104