| Index: chrome/browser/webdata/token_web_data.cc
|
| diff --git a/chrome/browser/webdata/token_web_data.cc b/chrome/browser/webdata/token_web_data.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..9c28d62c8968349cbea9ca6358c1547aa56f4df2
|
| --- /dev/null
|
| +++ b/chrome/browser/webdata/token_web_data.cc
|
| @@ -0,0 +1,110 @@
|
| +// Copyright 2013 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "chrome/browser/webdata/token_web_data.h"
|
| +
|
| +#include "base/bind.h"
|
| +#include "base/stl_util.h"
|
| +#include "chrome/browser/webdata/token_service_table.h"
|
| +#include "components/webdata/common/web_database_service.h"
|
| +#include "content/public/browser/browser_thread.h"
|
| +
|
| +using base::Bind;
|
| +using base::Time;
|
| +using content::BrowserThread;
|
| +
|
| +class TokenWebDataBackend
|
| + : public base::RefCountedThreadSafe<TokenWebDataBackend,
|
| + BrowserThread::DeleteOnDBThread> {
|
| +
|
| + public:
|
| + TokenWebDataBackend() {
|
| + }
|
| +
|
| + WebDatabase::State RemoveAllTokens(WebDatabase* db) {
|
| + if (TokenServiceTable::FromWebDatabase(db)->RemoveAllTokens()) {
|
| + return WebDatabase::COMMIT_NEEDED;
|
| + }
|
| + return WebDatabase::COMMIT_NOT_NEEDED;
|
| + }
|
| +
|
| + WebDatabase::State RemoveTokenForService(
|
| + const std::string& service, WebDatabase* db) {
|
| + if (TokenServiceTable::FromWebDatabase(db)
|
| + ->RemoveTokenForService(service)) {
|
| + return WebDatabase::COMMIT_NEEDED;
|
| + }
|
| + return WebDatabase::COMMIT_NOT_NEEDED;
|
| + }
|
| +
|
| + WebDatabase::State SetTokenForService(
|
| + const std::string& service, const std::string& token, WebDatabase* db) {
|
| + if (TokenServiceTable::FromWebDatabase(db)->SetTokenForService(service,
|
| + token)) {
|
| + return WebDatabase::COMMIT_NEEDED;
|
| + }
|
| + return WebDatabase::COMMIT_NOT_NEEDED;
|
| + }
|
| +
|
| + scoped_ptr<WDTypedResult> GetAllTokens(WebDatabase* db) {
|
| + std::map<std::string, std::string> map;
|
| + TokenServiceTable::FromWebDatabase(db)->GetAllTokens(&map);
|
| + return scoped_ptr<WDTypedResult>(
|
| + new WDResult<std::map<std::string, std::string> >(TOKEN_RESULT, map));
|
| + }
|
| +
|
| + protected:
|
| + virtual ~TokenWebDataBackend() {
|
| + }
|
| +
|
| + private:
|
| + friend struct BrowserThread::DeleteOnThread<BrowserThread::DB>;
|
| + friend class base::DeleteHelper<TokenWebDataBackend>;
|
| + // We have to friend RCTS<> so WIN shared-lib build is happy
|
| + // (http://crbug/112250).
|
| + friend class base::RefCountedThreadSafe<TokenWebDataBackend,
|
| + BrowserThread::DeleteOnDBThread>;
|
| +
|
| +};
|
| +
|
| +TokenWebData::TokenWebData(scoped_refptr<WebDatabaseService> wdbs,
|
| + const ProfileErrorCallback& callback)
|
| + : WebDataServiceBase(wdbs, callback,
|
| + BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI)),
|
| + token_backend_(new TokenWebDataBackend()) {
|
| +}
|
| +
|
| +void TokenWebData::SetTokenForService(const std::string& service,
|
| + const std::string& token) {
|
| + wdbs_->ScheduleDBTask(FROM_HERE,
|
| + Bind(&TokenWebDataBackend::SetTokenForService, token_backend_,
|
| + service, token));
|
| +}
|
| +
|
| +void TokenWebData::RemoveAllTokens() {
|
| + wdbs_->ScheduleDBTask(FROM_HERE,
|
| + Bind(&TokenWebDataBackend::RemoveAllTokens, token_backend_));
|
| +}
|
| +
|
| +void TokenWebData::RemoveTokenForService(const std::string& service) {
|
| + wdbs_->ScheduleDBTask(FROM_HERE,
|
| + Bind(&TokenWebDataBackend::RemoveTokenForService, token_backend_,
|
| + service));
|
| +}
|
| +
|
| +// Null on failure. Success is WDResult<std::string>
|
| +WebDataServiceBase::Handle TokenWebData::GetAllTokens(
|
| + WebDataServiceConsumer* consumer) {
|
| + return wdbs_->ScheduleDBTaskWithResult(FROM_HERE,
|
| + Bind(&TokenWebDataBackend::GetAllTokens, token_backend_), consumer);
|
| +}
|
| +
|
| +TokenWebData::TokenWebData()
|
| + : WebDataServiceBase(NULL, ProfileErrorCallback(),
|
| + BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI)),
|
| + token_backend_(new TokenWebDataBackend()) {
|
| +}
|
| +
|
| +TokenWebData::~TokenWebData() {
|
| +}
|
|
|