15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_database_helper.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include <vector> 86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h" 12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_helper.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/storage_partition.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/completion_callback.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_errors.h" 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/common/database/database_identifier.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserContext; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 2303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)using storage::DatabaseIdentifier; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowsingDataDatabaseHelper::DatabaseInfo::DatabaseInfo( 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const DatabaseIdentifier& identifier, 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& database_name, 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& description, 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 size, 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time last_modified) 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch : identifier(identifier), 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) database_name(database_name), 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) description(description), 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size(size), 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_modified(last_modified) { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowsingDataDatabaseHelper::DatabaseInfo::~DatabaseInfo() {} 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowsingDataDatabaseHelper::BrowsingDataDatabaseHelper(Profile* profile) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : is_fetching_(false), 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tracker_(BrowserContext:: 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetDefaultStoragePartition(profile)->GetDatabaseTracker()) { 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowsingDataDatabaseHelper::~BrowsingDataDatabaseHelper() { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataDatabaseHelper::StartFetching( 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Callback<void(const std::list<DatabaseInfo>&)>& callback) { 516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DCHECK_CURRENTLY_ON(BrowserThread::UI); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!is_fetching_); 536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DCHECK(!callback.is_null()); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_fetching_ = true; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) database_info_.clear(); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) completion_callback_ = callback; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::FILE, FROM_HERE, 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&BrowsingDataDatabaseHelper::FetchDatabaseInfoOnFileThread, 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this)); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataDatabaseHelper::DeleteDatabase(const std::string& origin, 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& name) { 666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DCHECK_CURRENTLY_ON(BrowserThread::UI); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::FILE, FROM_HERE, 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&BrowsingDataDatabaseHelper::DeleteDatabaseOnFileThread, this, 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) origin, name)); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataDatabaseHelper::FetchDatabaseInfoOnFileThread() { 746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DCHECK_CURRENTLY_ON(BrowserThread::FILE); 7503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) std::vector<storage::OriginInfo> origins_info; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (tracker_.get() && tracker_->GetAllOriginsInfo(&origins_info)) { 7703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) for (std::vector<storage::OriginInfo>::const_iterator ori = 7803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) origins_info.begin(); 7903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ori != origins_info.end(); 8003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ++ori) { 81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DatabaseIdentifier identifier = 82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DatabaseIdentifier::Parse(ori->GetOriginIdentifier()); 83eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (!BrowsingDataHelper::HasWebScheme(identifier.ToOrigin())) { 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Non-websafe state is not considered browsing data. 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::vector<base::string16> databases; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ori->GetAllDatabaseNames(&databases); 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (std::vector<base::string16>::const_iterator db = databases.begin(); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) db != databases.end(); ++db) { 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath file_path = 927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) tracker_->GetFullDBFilePath(ori->GetOriginIdentifier(), *db); 935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::File::Info file_info; 94a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (base::GetFileInfo(file_path, &file_info)) { 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) database_info_.push_back(DatabaseInfo( 96eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch identifier, 975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF16ToUTF8(*db), 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF16ToUTF8(ori->GetDatabaseDescription(*db)), 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) file_info.size, 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) file_info.last_modified)); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&BrowsingDataDatabaseHelper::NotifyInUIThread, this)); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataDatabaseHelper::NotifyInUIThread() { 1126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DCHECK_CURRENTLY_ON(BrowserThread::UI); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(is_fetching_); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) completion_callback_.Run(database_info_); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) completion_callback_.Reset(); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_fetching_ = false; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) database_info_.clear(); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowsingDataDatabaseHelper::DeleteDatabaseOnFileThread( 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& origin, 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& name) { 1236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DCHECK_CURRENTLY_ON(BrowserThread::FILE); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!tracker_.get()) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tracker_->DeleteDatabase(origin, base::UTF8ToUTF16(name), 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CompletionCallback()); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CannedBrowsingDataDatabaseHelper::PendingDatabaseInfo::PendingDatabaseInfo( 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& origin, 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& name, 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& description) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : origin(origin), 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name(name), 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) description(description) { 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CannedBrowsingDataDatabaseHelper::PendingDatabaseInfo::~PendingDatabaseInfo() {} 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool CannedBrowsingDataDatabaseHelper::PendingDatabaseInfo::operator<( 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PendingDatabaseInfo& other) const { 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (origin == other.origin) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return name < other.name; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return origin < other.origin; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CannedBrowsingDataDatabaseHelper::CannedBrowsingDataDatabaseHelper( 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile) 1501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : BrowsingDataDatabaseHelper(profile) { 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CannedBrowsingDataDatabaseHelper::AddDatabase( 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& origin, 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& name, 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& description) { 1576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DCHECK_CURRENTLY_ON(BrowserThread::UI); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (BrowsingDataHelper::HasWebScheme(origin)) { 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_database_info_.insert(PendingDatabaseInfo( 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) origin, name, description)); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CannedBrowsingDataDatabaseHelper::Reset() { 1656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DCHECK_CURRENTLY_ON(BrowserThread::UI); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_database_info_.clear(); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool CannedBrowsingDataDatabaseHelper::empty() const { 1706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DCHECK_CURRENTLY_ON(BrowserThread::UI); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return pending_database_info_.empty(); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)size_t CannedBrowsingDataDatabaseHelper::GetDatabaseCount() const { 1756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DCHECK_CURRENTLY_ON(BrowserThread::UI); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return pending_database_info_.size(); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const std::set<CannedBrowsingDataDatabaseHelper::PendingDatabaseInfo>& 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CannedBrowsingDataDatabaseHelper::GetPendingDatabaseInfo() { 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return pending_database_info_; 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CannedBrowsingDataDatabaseHelper::StartFetching( 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Callback<void(const std::list<DatabaseInfo>&)>& callback) { 1866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DCHECK_CURRENTLY_ON(BrowserThread::UI); 1875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(!callback.is_null()); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::list<DatabaseInfo> result; 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (std::set<PendingDatabaseInfo>::const_iterator 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) info = pending_database_info_.begin(); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) info != pending_database_info_.end(); ++info) { 193eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DatabaseIdentifier identifier = 194eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DatabaseIdentifier::CreateFromOrigin(info->origin); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) result.push_back(DatabaseInfo( 197eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch identifier, 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) info->name, 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) info->description, 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time())); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 2055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BrowserThread::UI, FROM_HERE, base::Bind(callback, result)); 2065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void CannedBrowsingDataDatabaseHelper::DeleteDatabase( 2095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& origin_identifier, 2105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& name) { 2115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GURL origin = 21203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) storage::DatabaseIdentifier::Parse(origin_identifier).ToOrigin(); 2135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (std::set<PendingDatabaseInfo>::iterator it = 2145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) pending_database_info_.begin(); 2155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) it != pending_database_info_.end(); 2165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ++it) { 2175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (it->origin == origin && it->name == name) { 2185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) pending_database_info_.erase(it); 2195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) break; 2205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 2215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 2225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BrowsingDataDatabaseHelper::DeleteDatabase(origin_identifier, name); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 224eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 225eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochCannedBrowsingDataDatabaseHelper::~CannedBrowsingDataDatabaseHelper() {} 226