| Index: components/history/core/browser/fake_web_history_service.cc
|
| diff --git a/components/history/core/browser/fake_web_history_service.cc b/components/history/core/browser/fake_web_history_service.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..d25717d6d5c16eb649b025a7c903d2c8a04a2da6
|
| --- /dev/null
|
| +++ b/components/history/core/browser/fake_web_history_service.cc
|
| @@ -0,0 +1,135 @@
|
| +// Copyright 2015 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 "components/history/core/browser/fake_web_history_service.h"
|
| +
|
| +#include "base/callback.h"
|
| +#include "base/strings/string_number_conversions.h"
|
| +#include "base/time/time.h"
|
| +#include "net/base/url_util.h"
|
| +#include "net/url_request/url_request_context_getter.h"
|
| +#include "url/gurl.h"
|
| +
|
| +namespace history {
|
| +
|
| +// FakeWebHistoryService::Request ----------------------------------------------
|
| +
|
| +FakeWebHistoryService::Request::Request(
|
| + FakeWebHistoryService* service,
|
| + bool emulate_success,
|
| + int emulate_response_code,
|
| + const CompletionCallback& callback,
|
| + base::Time begin,
|
| + base::Time end,
|
| + int max_count)
|
| + : service_(service),
|
| + emulate_success_(emulate_success),
|
| + emulate_response_code_(emulate_response_code),
|
| + callback_(callback),
|
| + begin_(begin),
|
| + end_(end),
|
| + max_count_(max_count),
|
| + is_pending_(false) {
|
| +}
|
| +
|
| +bool FakeWebHistoryService::Request::IsPending() {
|
| + return is_pending_;
|
| +}
|
| +
|
| +int FakeWebHistoryService::Request::GetResponseCode() {
|
| + return emulate_response_code_;
|
| +}
|
| +
|
| +const std::string& FakeWebHistoryService::Request::GetResponseBody() {
|
| + int count = service_->GetNumberOfVisitsBetween(begin_, end_);
|
| + if (max_count_ && max_count_ < count)
|
| + count = max_count_;
|
| +
|
| + response_body_ = "{ \"event\": [";
|
| + for (int i = 0; i < count; ++i)
|
| + response_body_ += i ? ", {}" : "{}";
|
| + response_body_ += "] }";
|
| + return response_body_;
|
| +}
|
| +
|
| +void FakeWebHistoryService::Request::SetPostData(const std::string& post_data) {
|
| + // Unused.
|
| +};
|
| +
|
| +void FakeWebHistoryService::Request::Start() {
|
| + is_pending_ = true;
|
| + callback_.Run(this, emulate_success_);
|
| +}
|
| +
|
| +// FakeWebHistoryService -------------------------------------------------------
|
| +
|
| +FakeWebHistoryService::FakeWebHistoryService(
|
| + OAuth2TokenService* token_service,
|
| + SigninManagerBase* signin_manager,
|
| + const scoped_refptr<net::URLRequestContextGetter>& request_context)
|
| + : history::WebHistoryService(
|
| + token_service,
|
| + signin_manager,
|
| + request_context) {
|
| +}
|
| +
|
| +FakeWebHistoryService::~FakeWebHistoryService() {
|
| +}
|
| +
|
| +void FakeWebHistoryService::SetupFakeResponse(
|
| + bool emulate_success, int emulate_response_code) {
|
| + emulate_success_ = emulate_success;
|
| + emulate_response_code_ = emulate_response_code;
|
| +}
|
| +
|
| +void FakeWebHistoryService::AddSyncedVisit(
|
| + std::string url, base::Time timestamp) {
|
| + visits_.push_back(make_pair(url, timestamp));
|
| +}
|
| +
|
| +void FakeWebHistoryService::ClearSyncedVisits() {
|
| + visits_.clear();
|
| +}
|
| +
|
| +int FakeWebHistoryService::GetNumberOfVisitsBetween(
|
| + const base::Time& begin, const base::Time& end) {
|
| + int result = 0;
|
| + for (const Visit& visit : visits_) {
|
| + if (visit.second >= begin && visit.second < end)
|
| + ++result;
|
| + }
|
| + return result;
|
| +}
|
| +
|
| +base::Time FakeWebHistoryService::GetTimeForKeyInQuery(
|
| + const GURL& url, const std::string& key) {
|
| + std::string value;
|
| + if (!net::GetValueForKeyInQuery(url, key, &value))
|
| + return base::Time();
|
| +
|
| + int64 us;
|
| + if (!base::StringToInt64(value, &us))
|
| + return base::Time();
|
| + return base::Time::UnixEpoch() + base::TimeDelta::FromMicroseconds(us);
|
| +}
|
| +
|
| +FakeWebHistoryService::Request* FakeWebHistoryService::CreateRequest(
|
| + const GURL& url, const CompletionCallback& callback) {
|
| + // Find the time range endpoints in the URL.
|
| + base::Time begin = GetTimeForKeyInQuery(url, "min");
|
| + base::Time end = GetTimeForKeyInQuery(url, "max");
|
| +
|
| + if (end.is_null())
|
| + end = base::Time::Max();
|
| +
|
| + int max_count = 0;
|
| + std::string max_count_str;
|
| + if (net::GetValueForKeyInQuery(url, "num", &max_count_str))
|
| + base::StringToInt(max_count_str, &max_count);
|
| +
|
| + return new Request(this, emulate_success_, emulate_response_code_,
|
| + callback, begin, end, max_count);
|
| +}
|
| +
|
| +} // namespace history
|
|
|