mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-11-24 14:26:09 +03:00
287 lines
8.6 KiB
C++
287 lines
8.6 KiB
C++
|
// Copyright (c) 2012 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 "net/cookies/cookie_store_test_helpers.h"
|
||
|
|
||
|
#include "base/bind.h"
|
||
|
#include "base/location.h"
|
||
|
#include "base/single_thread_task_runner.h"
|
||
|
#include "base/strings/string_util.h"
|
||
|
#include "base/threading/thread_task_runner_handle.h"
|
||
|
#include "net/base/registry_controlled_domains/registry_controlled_domain.h"
|
||
|
#include "net/cookies/cookie_store.h"
|
||
|
#include "url/gurl.h"
|
||
|
|
||
|
using net::registry_controlled_domains::GetDomainAndRegistry;
|
||
|
using net::registry_controlled_domains::GetRegistryLength;
|
||
|
using net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES;
|
||
|
using net::registry_controlled_domains::INCLUDE_UNKNOWN_REGISTRIES;
|
||
|
using TimeRange = net::CookieDeletionInfo::TimeRange;
|
||
|
|
||
|
namespace {
|
||
|
|
||
|
std::string GetRegistry(const GURL& url) {
|
||
|
size_t registry_length = GetRegistryLength(url, INCLUDE_UNKNOWN_REGISTRIES,
|
||
|
INCLUDE_PRIVATE_REGISTRIES);
|
||
|
if (registry_length == 0)
|
||
|
return std::string();
|
||
|
return std::string(url.host(), url.host().length() - registry_length,
|
||
|
registry_length);
|
||
|
}
|
||
|
|
||
|
} // namespace
|
||
|
|
||
|
namespace net {
|
||
|
|
||
|
const int kDelayedTime = 0;
|
||
|
|
||
|
DelayedCookieMonsterChangeDispatcher::DelayedCookieMonsterChangeDispatcher() =
|
||
|
default;
|
||
|
DelayedCookieMonsterChangeDispatcher::~DelayedCookieMonsterChangeDispatcher() =
|
||
|
default;
|
||
|
|
||
|
std::unique_ptr<CookieChangeSubscription>
|
||
|
DelayedCookieMonsterChangeDispatcher::AddCallbackForCookie(
|
||
|
const GURL& url,
|
||
|
const std::string& name,
|
||
|
CookieChangeCallback callback) {
|
||
|
ADD_FAILURE();
|
||
|
return nullptr;
|
||
|
}
|
||
|
std::unique_ptr<CookieChangeSubscription>
|
||
|
DelayedCookieMonsterChangeDispatcher::AddCallbackForUrl(
|
||
|
const GURL& url,
|
||
|
CookieChangeCallback callback) {
|
||
|
ADD_FAILURE();
|
||
|
return nullptr;
|
||
|
}
|
||
|
std::unique_ptr<CookieChangeSubscription>
|
||
|
DelayedCookieMonsterChangeDispatcher::AddCallbackForAllChanges(
|
||
|
CookieChangeCallback callback) {
|
||
|
ADD_FAILURE();
|
||
|
return nullptr;
|
||
|
}
|
||
|
|
||
|
DelayedCookieMonster::DelayedCookieMonster()
|
||
|
: cookie_monster_(new CookieMonster(nullptr, nullptr)),
|
||
|
did_run_(false),
|
||
|
result_(false) {}
|
||
|
|
||
|
DelayedCookieMonster::~DelayedCookieMonster() = default;
|
||
|
|
||
|
void DelayedCookieMonster::SetCookiesInternalCallback(bool result) {
|
||
|
result_ = result;
|
||
|
did_run_ = true;
|
||
|
}
|
||
|
|
||
|
void DelayedCookieMonster::GetCookieListWithOptionsInternalCallback(
|
||
|
const CookieList& cookie_list) {
|
||
|
cookie_list_ = cookie_list;
|
||
|
did_run_ = true;
|
||
|
}
|
||
|
|
||
|
void DelayedCookieMonster::SetCookieWithOptionsAsync(
|
||
|
const GURL& url,
|
||
|
const std::string& cookie_line,
|
||
|
const CookieOptions& options,
|
||
|
CookieMonster::SetCookiesCallback callback) {
|
||
|
did_run_ = false;
|
||
|
cookie_monster_->SetCookieWithOptionsAsync(
|
||
|
url, cookie_line, options,
|
||
|
base::Bind(&DelayedCookieMonster::SetCookiesInternalCallback,
|
||
|
base::Unretained(this)));
|
||
|
DCHECK_EQ(did_run_, true);
|
||
|
base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
|
||
|
FROM_HERE,
|
||
|
base::BindOnce(&DelayedCookieMonster::InvokeSetCookiesCallback,
|
||
|
base::Unretained(this), std::move(callback)),
|
||
|
base::TimeDelta::FromMilliseconds(kDelayedTime));
|
||
|
}
|
||
|
|
||
|
void DelayedCookieMonster::SetCanonicalCookieAsync(
|
||
|
std::unique_ptr<CanonicalCookie> cookie,
|
||
|
bool secure_source,
|
||
|
bool modify_http_only,
|
||
|
SetCookiesCallback callback) {
|
||
|
did_run_ = false;
|
||
|
cookie_monster_->SetCanonicalCookieAsync(
|
||
|
std::move(cookie), secure_source, modify_http_only,
|
||
|
base::Bind(&DelayedCookieMonster::SetCookiesInternalCallback,
|
||
|
base::Unretained(this)));
|
||
|
DCHECK_EQ(did_run_, true);
|
||
|
base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
|
||
|
FROM_HERE,
|
||
|
base::BindOnce(&DelayedCookieMonster::InvokeSetCookiesCallback,
|
||
|
base::Unretained(this), std::move(callback)),
|
||
|
base::TimeDelta::FromMilliseconds(kDelayedTime));
|
||
|
}
|
||
|
|
||
|
void DelayedCookieMonster::GetCookieListWithOptionsAsync(
|
||
|
const GURL& url,
|
||
|
const CookieOptions& options,
|
||
|
CookieMonster::GetCookieListCallback callback) {
|
||
|
did_run_ = false;
|
||
|
cookie_monster_->GetCookieListWithOptionsAsync(
|
||
|
url, options,
|
||
|
base::Bind(
|
||
|
&DelayedCookieMonster::GetCookieListWithOptionsInternalCallback,
|
||
|
base::Unretained(this)));
|
||
|
DCHECK_EQ(did_run_, true);
|
||
|
base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
|
||
|
FROM_HERE,
|
||
|
base::BindOnce(&DelayedCookieMonster::InvokeGetCookieListCallback,
|
||
|
base::Unretained(this), std::move(callback)),
|
||
|
base::TimeDelta::FromMilliseconds(kDelayedTime));
|
||
|
}
|
||
|
|
||
|
void DelayedCookieMonster::GetAllCookiesAsync(GetCookieListCallback callback) {
|
||
|
cookie_monster_->GetAllCookiesAsync(std::move(callback));
|
||
|
}
|
||
|
|
||
|
void DelayedCookieMonster::InvokeSetCookiesCallback(
|
||
|
CookieMonster::SetCookiesCallback callback) {
|
||
|
if (!callback.is_null())
|
||
|
std::move(callback).Run(result_);
|
||
|
}
|
||
|
|
||
|
void DelayedCookieMonster::InvokeGetCookieListCallback(
|
||
|
CookieMonster::GetCookieListCallback callback) {
|
||
|
if (!callback.is_null())
|
||
|
std::move(callback).Run(cookie_list_);
|
||
|
}
|
||
|
|
||
|
bool DelayedCookieMonster::SetCookieWithOptions(
|
||
|
const GURL& url,
|
||
|
const std::string& cookie_line,
|
||
|
const CookieOptions& options) {
|
||
|
ADD_FAILURE();
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
void DelayedCookieMonster::DeleteCookie(const GURL& url,
|
||
|
const std::string& cookie_name) {
|
||
|
ADD_FAILURE();
|
||
|
}
|
||
|
|
||
|
void DelayedCookieMonster::DeleteCookieAsync(const GURL& url,
|
||
|
const std::string& cookie_name,
|
||
|
base::OnceClosure callback) {
|
||
|
ADD_FAILURE();
|
||
|
}
|
||
|
|
||
|
void DelayedCookieMonster::DeleteCanonicalCookieAsync(
|
||
|
const CanonicalCookie& cookie,
|
||
|
DeleteCallback callback) {
|
||
|
ADD_FAILURE();
|
||
|
}
|
||
|
|
||
|
void DelayedCookieMonster::DeleteAllCreatedInTimeRangeAsync(
|
||
|
const TimeRange& creation_range,
|
||
|
DeleteCallback callback) {
|
||
|
ADD_FAILURE();
|
||
|
}
|
||
|
|
||
|
void DelayedCookieMonster::DeleteAllMatchingInfoAsync(
|
||
|
net::CookieDeletionInfo delete_info,
|
||
|
DeleteCallback callback) {
|
||
|
ADD_FAILURE();
|
||
|
}
|
||
|
|
||
|
void DelayedCookieMonster::DeleteSessionCookiesAsync(DeleteCallback) {
|
||
|
ADD_FAILURE();
|
||
|
}
|
||
|
|
||
|
void DelayedCookieMonster::FlushStore(base::OnceClosure callback) {
|
||
|
ADD_FAILURE();
|
||
|
}
|
||
|
|
||
|
CookieChangeDispatcher& DelayedCookieMonster::GetChangeDispatcher() {
|
||
|
return change_dispatcher_;
|
||
|
}
|
||
|
|
||
|
bool DelayedCookieMonster::IsEphemeral() {
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// CookieURLHelper
|
||
|
//
|
||
|
CookieURLHelper::CookieURLHelper(const std::string& url_string)
|
||
|
: url_(url_string),
|
||
|
registry_(GetRegistry(url_)),
|
||
|
domain_and_registry_(
|
||
|
GetDomainAndRegistry(url_, INCLUDE_PRIVATE_REGISTRIES)) {}
|
||
|
|
||
|
const GURL CookieURLHelper::AppendPath(const std::string& path) const {
|
||
|
return GURL(url_.spec() + path);
|
||
|
}
|
||
|
|
||
|
std::string CookieURLHelper::Format(const std::string& format_string) const {
|
||
|
std::string new_string = format_string;
|
||
|
base::ReplaceSubstringsAfterOffset(&new_string, 0, "%D",
|
||
|
domain_and_registry_);
|
||
|
base::ReplaceSubstringsAfterOffset(&new_string, 0, "%R", registry_);
|
||
|
return new_string;
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// FlushablePersistentStore
|
||
|
//
|
||
|
FlushablePersistentStore::FlushablePersistentStore() : flush_count_(0) {}
|
||
|
|
||
|
void FlushablePersistentStore::Load(const LoadedCallback& loaded_callback) {
|
||
|
std::vector<std::unique_ptr<CanonicalCookie>> out_cookies;
|
||
|
base::ThreadTaskRunnerHandle::Get()->PostTask(
|
||
|
FROM_HERE, base::BindOnce(loaded_callback, std::move(out_cookies)));
|
||
|
}
|
||
|
|
||
|
void FlushablePersistentStore::LoadCookiesForKey(
|
||
|
const std::string& key,
|
||
|
const LoadedCallback& loaded_callback) {
|
||
|
Load(loaded_callback);
|
||
|
}
|
||
|
|
||
|
void FlushablePersistentStore::AddCookie(const CanonicalCookie&) {}
|
||
|
|
||
|
void FlushablePersistentStore::UpdateCookieAccessTime(const CanonicalCookie&) {}
|
||
|
|
||
|
void FlushablePersistentStore::DeleteCookie(const CanonicalCookie&) {}
|
||
|
|
||
|
void FlushablePersistentStore::SetForceKeepSessionState() {}
|
||
|
|
||
|
void FlushablePersistentStore::SetBeforeFlushCallback(
|
||
|
base::RepeatingClosure callback) {}
|
||
|
|
||
|
void FlushablePersistentStore::Flush(base::OnceClosure callback) {
|
||
|
base::AutoLock lock(flush_count_lock_);
|
||
|
++flush_count_;
|
||
|
std::move(callback).Run();
|
||
|
}
|
||
|
|
||
|
int FlushablePersistentStore::flush_count() {
|
||
|
base::AutoLock lock(flush_count_lock_);
|
||
|
return flush_count_;
|
||
|
}
|
||
|
|
||
|
FlushablePersistentStore::~FlushablePersistentStore() = default;
|
||
|
|
||
|
//
|
||
|
// CallbackCounter
|
||
|
//
|
||
|
CallbackCounter::CallbackCounter() : callback_count_(0) {}
|
||
|
|
||
|
void CallbackCounter::Callback() {
|
||
|
base::AutoLock lock(callback_count_lock_);
|
||
|
++callback_count_;
|
||
|
}
|
||
|
|
||
|
int CallbackCounter::callback_count() {
|
||
|
base::AutoLock lock(callback_count_lock_);
|
||
|
return callback_count_;
|
||
|
}
|
||
|
|
||
|
CallbackCounter::~CallbackCounter() = default;
|
||
|
|
||
|
} // namespace net
|