Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / browsing_data / browsing_data_local_storage_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_local_storage_helper.h"
6
7 #include "base/bind.h"
8 #include "chrome/browser/browsing_data/browsing_data_helper.h"
9 #include "chrome/browser/profiles/profile.h"
10 #include "content/public/browser/browser_thread.h"
11 #include "content/public/browser/local_storage_usage_info.h"
12 #include "content/public/browser/storage_partition.h"
13
14 using content::BrowserContext;
15 using content::BrowserThread;
16 using content::DOMStorageContext;
17
18 BrowsingDataLocalStorageHelper::LocalStorageInfo::LocalStorageInfo(
19     const GURL& origin_url, int64 size, base::Time last_modified)
20     : origin_url(origin_url), size(size), last_modified(last_modified) {}
21
22 BrowsingDataLocalStorageHelper::LocalStorageInfo::~LocalStorageInfo() {}
23
24 BrowsingDataLocalStorageHelper::BrowsingDataLocalStorageHelper(
25     Profile* profile)
26     : dom_storage_context_(
27           BrowserContext::GetDefaultStoragePartition(profile)->
28               GetDOMStorageContext()),
29       is_fetching_(false) {
30   DCHECK(dom_storage_context_);
31 }
32
33 BrowsingDataLocalStorageHelper::~BrowsingDataLocalStorageHelper() {
34 }
35
36 void BrowsingDataLocalStorageHelper::StartFetching(
37     const base::Callback<void(const std::list<LocalStorageInfo>&)>& callback) {
38   DCHECK_CURRENTLY_ON(BrowserThread::UI);
39   DCHECK(!is_fetching_);
40   DCHECK(!callback.is_null());
41
42   is_fetching_ = true;
43   completion_callback_ = callback;
44   dom_storage_context_->GetLocalStorageUsage(
45       base::Bind(
46           &BrowsingDataLocalStorageHelper::GetUsageInfoCallback, this));
47 }
48
49 void BrowsingDataLocalStorageHelper::DeleteOrigin(const GURL& origin) {
50   DCHECK_CURRENTLY_ON(BrowserThread::UI);
51   dom_storage_context_->DeleteLocalStorage(origin);
52 }
53
54 void BrowsingDataLocalStorageHelper::GetUsageInfoCallback(
55     const std::vector<content::LocalStorageUsageInfo>& infos) {
56   DCHECK_CURRENTLY_ON(BrowserThread::UI);
57
58   for (size_t i = 0; i < infos.size(); ++i) {
59     // Non-websafe state is not considered browsing data.
60     const content::LocalStorageUsageInfo& info = infos[i];
61     if (BrowsingDataHelper::HasWebScheme(info.origin)) {
62       local_storage_info_.push_back(
63           LocalStorageInfo(info.origin, info.data_size, info.last_modified));
64     }
65   }
66
67   BrowserThread::PostTask(
68       BrowserThread::UI, FROM_HERE,
69       base::Bind(&BrowsingDataLocalStorageHelper::CallCompletionCallback,
70                  this));
71 }
72
73 void BrowsingDataLocalStorageHelper::CallCompletionCallback() {
74   DCHECK(is_fetching_);
75   completion_callback_.Run(local_storage_info_);
76   completion_callback_.Reset();
77   is_fetching_ = false;
78 }
79
80 //---------------------------------------------------------
81
82 CannedBrowsingDataLocalStorageHelper::CannedBrowsingDataLocalStorageHelper(
83     Profile* profile)
84     : BrowsingDataLocalStorageHelper(profile) {
85 }
86
87 void CannedBrowsingDataLocalStorageHelper::AddLocalStorage(
88     const GURL& origin) {
89   if (BrowsingDataHelper::HasWebScheme(origin))
90     pending_local_storage_info_.insert(origin);
91 }
92
93 void CannedBrowsingDataLocalStorageHelper::Reset() {
94   pending_local_storage_info_.clear();
95 }
96
97 bool CannedBrowsingDataLocalStorageHelper::empty() const {
98   return pending_local_storage_info_.empty();
99 }
100
101 size_t CannedBrowsingDataLocalStorageHelper::GetLocalStorageCount() const {
102   return pending_local_storage_info_.size();
103 }
104
105 const std::set<GURL>&
106 CannedBrowsingDataLocalStorageHelper::GetLocalStorageInfo() const {
107   return pending_local_storage_info_;
108 }
109
110 void CannedBrowsingDataLocalStorageHelper::StartFetching(
111     const base::Callback<void(const std::list<LocalStorageInfo>&)>& callback) {
112   DCHECK_CURRENTLY_ON(BrowserThread::UI);
113   DCHECK(!callback.is_null());
114
115   std::list<LocalStorageInfo> result;
116   for (std::set<GURL>::iterator iter = pending_local_storage_info_.begin();
117        iter != pending_local_storage_info_.end(); ++iter) {
118     result.push_back(
119         LocalStorageInfo(*iter, 0,  base::Time()));
120   }
121
122   BrowserThread::PostTask(
123       BrowserThread::UI, FROM_HERE, base::Bind(callback, result));
124 }
125
126 void CannedBrowsingDataLocalStorageHelper::DeleteOrigin(const GURL& origin) {
127   pending_local_storage_info_.erase(origin);
128   BrowsingDataLocalStorageHelper::DeleteOrigin(origin);
129 }
130
131 CannedBrowsingDataLocalStorageHelper::~CannedBrowsingDataLocalStorageHelper() {}