| Index: chrome/browser/history/web_history_service.cc
|
| diff --git a/chrome/browser/history/web_history_service.cc b/chrome/browser/history/web_history_service.cc
|
| index e5a8014d1171e30504b67322a3d75749f3ac2041..58c42d60622ac79c9bc8b6010eb73d2e73e6671c 100644
|
| --- a/chrome/browser/history/web_history_service.cc
|
| +++ b/chrome/browser/history/web_history_service.cc
|
| @@ -40,6 +40,12 @@ const char kHistoryQueryHistoryUrl[] =
|
| const char kHistoryDeleteHistoryUrl[] =
|
| "https://history.google.com/history/api/delete?client=chrome";
|
|
|
| +const char kHistoryAudioHistoryUrl[] =
|
| + "https://history.google.com/history/api/lookup?client=audio";
|
| +
|
| +const char kHistoryAudioHistoryChangeUrl[] =
|
| + "https://history.google.com/history/api/change";
|
| +
|
| const char kPostDataMimeType[] = "text/plain";
|
|
|
| // The maximum number of retries for the URLFetcher requests.
|
| @@ -53,21 +59,19 @@ class RequestImpl : public WebHistoryService::Request,
|
|
|
| // Returns the response code received from the server, which will only be
|
| // valid if the request succeeded.
|
| - int response_code() { return response_code_; }
|
| + int GetResponseCode() override { return response_code_; }
|
|
|
| // Returns the contents of the response body received from the server.
|
| - const std::string& response_body() { return response_body_; }
|
| + const std::string& GetResponseBody() override { return response_body_; }
|
|
|
| - bool is_pending() override { return is_pending_; }
|
| + bool IsPending() override { return is_pending_; }
|
|
|
| private:
|
| friend class history::WebHistoryService;
|
|
|
| - typedef base::Callback<void(Request*, bool)> CompletionCallback;
|
| -
|
| RequestImpl(Profile* profile,
|
| const GURL& url,
|
| - const CompletionCallback& callback)
|
| + const WebHistoryService::CompletionCallback& callback)
|
| : OAuth2TokenService::Consumer("web_history"),
|
| profile_(profile),
|
| url_(url),
|
| @@ -78,7 +82,7 @@ class RequestImpl : public WebHistoryService::Request,
|
| }
|
|
|
| // Tells the request to do its thang.
|
| - void Start() {
|
| + void Start() override {
|
| OAuth2TokenService::ScopeSet oauth_scopes;
|
| oauth_scopes.insert(kHistoryOAuthScope);
|
|
|
| @@ -171,7 +175,7 @@ class RequestImpl : public WebHistoryService::Request,
|
| return fetcher;
|
| }
|
|
|
| - void set_post_data(const std::string& post_data) {
|
| + void SetPostData(const std::string& post_data) override {
|
| post_data_ = post_data;
|
| }
|
|
|
| @@ -203,27 +207,12 @@ class RequestImpl : public WebHistoryService::Request,
|
| int auth_retry_count_;
|
|
|
| // The callback to execute when the query is complete.
|
| - CompletionCallback callback_;
|
| + WebHistoryService::CompletionCallback callback_;
|
|
|
| // True if the request was started and has not yet completed, otherwise false.
|
| bool is_pending_;
|
| };
|
|
|
| -// Extracts a JSON-encoded HTTP response into a DictionaryValue.
|
| -// If |request|'s HTTP response code indicates failure, or if the response
|
| -// body is not JSON, a null pointer is returned.
|
| -scoped_ptr<base::DictionaryValue> ReadResponse(RequestImpl* request) {
|
| - scoped_ptr<base::DictionaryValue> result;
|
| - if (request->response_code() == net::HTTP_OK) {
|
| - base::Value* value = base::JSONReader::Read(request->response_body());
|
| - if (value && value->IsType(base::Value::TYPE_DICTIONARY))
|
| - result.reset(static_cast<base::DictionaryValue*>(value));
|
| - else
|
| - DLOG(WARNING) << "Non-JSON response received from history server.";
|
| - }
|
| - return result.Pass();
|
| -}
|
| -
|
| // Converts a time into a string for use as a parameter in a request to the
|
| // history server.
|
| std::string ServerTimeString(base::Time time) {
|
| @@ -303,6 +292,27 @@ WebHistoryService::WebHistoryService(Profile* profile)
|
|
|
| WebHistoryService::~WebHistoryService() {
|
| STLDeleteElements(&pending_expire_requests_);
|
| + STLDeleteElements(&pending_audio_history_requests_);
|
| +}
|
| +
|
| +WebHistoryService::Request* WebHistoryService::CreateRequest(
|
| + const GURL& url,
|
| + const CompletionCallback& callback) {
|
| + return new RequestImpl(profile_, url, callback);
|
| +}
|
| +
|
| +// static
|
| +scoped_ptr<base::DictionaryValue> WebHistoryService::ReadResponse(
|
| + WebHistoryService::Request* request) {
|
| + scoped_ptr<base::DictionaryValue> result;
|
| + if (request->GetResponseCode() == net::HTTP_OK) {
|
| + base::Value* value = base::JSONReader::Read(request->GetResponseBody());
|
| + if (value && value->IsType(base::Value::TYPE_DICTIONARY))
|
| + result.reset(static_cast<base::DictionaryValue*>(value));
|
| + else
|
| + DLOG(WARNING) << "Non-JSON response received from history server.";
|
| + }
|
| + return result.Pass();
|
| }
|
|
|
| scoped_ptr<WebHistoryService::Request> WebHistoryService::QueryHistory(
|
| @@ -310,12 +320,11 @@ scoped_ptr<WebHistoryService::Request> WebHistoryService::QueryHistory(
|
| const QueryOptions& options,
|
| const WebHistoryService::QueryWebHistoryCallback& callback) {
|
| // Wrap the original callback into a generic completion callback.
|
| - RequestImpl::CompletionCallback completion_callback = base::Bind(
|
| + CompletionCallback completion_callback = base::Bind(
|
| &WebHistoryService::QueryHistoryCompletionCallback, callback);
|
|
|
| GURL url = GetQueryUrl(text_query, options, server_version_info_);
|
| - scoped_ptr<RequestImpl> request(
|
| - new RequestImpl(profile_, url, completion_callback));
|
| + scoped_ptr<Request> request(CreateRequest(url, completion_callback));
|
| request->Start();
|
| return request.Pass();
|
| }
|
| @@ -358,14 +367,13 @@ void WebHistoryService::ExpireHistory(
|
| url = net::AppendQueryParameter(url, "kvi", server_version_info_);
|
|
|
| // Wrap the original callback into a generic completion callback.
|
| - RequestImpl::CompletionCallback completion_callback =
|
| + CompletionCallback completion_callback =
|
| base::Bind(&WebHistoryService::ExpireHistoryCompletionCallback,
|
| weak_ptr_factory_.GetWeakPtr(),
|
| callback);
|
|
|
| - scoped_ptr<RequestImpl> request(
|
| - new RequestImpl(profile_, url, completion_callback));
|
| - request->set_post_data(post_data);
|
| + scoped_ptr<Request> request(CreateRequest(url, completion_callback));
|
| + request->SetPostData(post_data);
|
| request->Start();
|
| pending_expire_requests_.insert(request.release());
|
| }
|
| @@ -382,6 +390,48 @@ void WebHistoryService::ExpireHistoryBetween(
|
| ExpireHistory(expire_list, callback);
|
| }
|
|
|
| +void WebHistoryService::GetAudioHistoryEnabled(
|
| + const AudioWebHistoryCallback& callback) {
|
| + // Wrap the original callback into a generic completion callback.
|
| + CompletionCallback completion_callback =
|
| + base::Bind(&WebHistoryService::AudioHistoryCompletionCallback,
|
| + weak_ptr_factory_.GetWeakPtr(),
|
| + callback);
|
| +
|
| + GURL url(kHistoryAudioHistoryUrl);
|
| + scoped_ptr<Request> request(CreateRequest(url, completion_callback));
|
| + request->Start();
|
| + pending_audio_history_requests_.insert(request.release());
|
| +}
|
| +
|
| +void WebHistoryService::SetAudioHistoryEnabled(
|
| + bool new_enabled_value,
|
| + const AudioWebHistoryCallback& callback) {
|
| + // Wrap the original callback into a generic completion callback.
|
| + CompletionCallback completion_callback =
|
| + base::Bind(&WebHistoryService::AudioHistoryCompletionCallback,
|
| + weak_ptr_factory_.GetWeakPtr(),
|
| + callback);
|
| +
|
| + GURL url(kHistoryAudioHistoryChangeUrl);
|
| + scoped_ptr<Request> request(CreateRequest(url, completion_callback));
|
| +
|
| + base::DictionaryValue enable_audio_history;
|
| + enable_audio_history.SetBoolean("enable_history_recording",
|
| + new_enabled_value);
|
| + enable_audio_history.SetString("client", "audio");
|
| + std::string post_data;
|
| + base::JSONWriter::Write(&enable_audio_history, &post_data);
|
| + request->SetPostData(post_data);
|
| +
|
| + request->Start();
|
| + pending_audio_history_requests_.insert(request.release());
|
| +}
|
| +
|
| +size_t WebHistoryService::GetNumberOfPendingAudioHistoryRequests() {
|
| + return pending_audio_history_requests_.size();
|
| +}
|
| +
|
| // static
|
| void WebHistoryService::QueryHistoryCompletionCallback(
|
| const WebHistoryService::QueryWebHistoryCallback& callback,
|
| @@ -389,7 +439,7 @@ void WebHistoryService::QueryHistoryCompletionCallback(
|
| bool success) {
|
| scoped_ptr<base::DictionaryValue> response_value;
|
| if (success)
|
| - response_value = ReadResponse(static_cast<RequestImpl*>(request));
|
| + response_value = ReadResponse(request);
|
| callback.Run(request, response_value.get());
|
| }
|
|
|
| @@ -399,7 +449,7 @@ void WebHistoryService::ExpireHistoryCompletionCallback(
|
| bool success) {
|
| scoped_ptr<base::DictionaryValue> response_value;
|
| if (success) {
|
| - response_value = ReadResponse(static_cast<RequestImpl*>(request));
|
| + response_value = ReadResponse(request);
|
| if (response_value)
|
| response_value->GetString("version_info", &server_version_info_);
|
| }
|
| @@ -409,4 +459,21 @@ void WebHistoryService::ExpireHistoryCompletionCallback(
|
| delete request;
|
| }
|
|
|
| +void WebHistoryService::AudioHistoryCompletionCallback(
|
| + const WebHistoryService::AudioWebHistoryCallback& callback,
|
| + WebHistoryService::Request* request,
|
| + bool success) {
|
| + pending_audio_history_requests_.erase(request);
|
| + scoped_ptr<WebHistoryService::Request> request_ptr(request);
|
| +
|
| + scoped_ptr<base::DictionaryValue> response_value;
|
| + bool enabled_value = false;
|
| + if (success) {
|
| + response_value = ReadResponse(request_ptr.get());
|
| + if (response_value)
|
| + response_value->GetBoolean("history_recording_enabled", &enabled_value);
|
| + }
|
| + callback.Run(success, enabled_value);
|
| +}
|
| +
|
| } // namespace history
|
|
|