- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / browsing_data / browsing_data_flash_lso_helper.cc
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 }