libweave: Remove dependency on chromeos/http* and chromeos/mime
Code relates with http_constants.*.
CL is part of effort to remove dependency on chromeos.
BUG=brillo:1250
TEST='FEATURES=test emerge-gizmo libweave buffet'
Change-Id: I52e4e301178a379fbcce684ce11a008da721c1bb
diff --git a/libweave/libweave.gyp b/libweave/libweave.gyp
index ba7e026..527c246 100644
--- a/libweave/libweave.gyp
+++ b/libweave/libweave.gyp
@@ -34,6 +34,7 @@
'src/commands/user_role.cc',
'src/device_manager.cc',
'src/device_registration_info.cc',
+ 'src/http_constants.cc',
'src/notification/notification_parser.cc',
'src/notification/pull_channel.cc',
'src/notification/xml_node.cc',
diff --git a/libweave/src/device_registration_info.cc b/libweave/src/device_registration_info.cc
index bcebaba..229ba91 100644
--- a/libweave/src/device_registration_info.cc
+++ b/libweave/src/device_registration_info.cc
@@ -19,7 +19,6 @@
#include <chromeos/data_encoding.h>
#include <chromeos/errors/error_codes.h>
#include <chromeos/key_value_store.h>
-#include <chromeos/mime_utils.h>
#include <chromeos/strings/string_utils.h>
#include <chromeos/url_utils.h>
#include <weave/http_client.h>
@@ -29,6 +28,7 @@
#include "libweave/src/commands/command_definition.h"
#include "libweave/src/commands/command_manager.h"
#include "libweave/src/commands/schema_constants.h"
+#include "libweave/src/http_constants.h"
#include "libweave/src/notification/xmpp_channel.h"
#include "libweave/src/states/state_manager.h"
#include "libweave/src/utils.h"
@@ -41,17 +41,6 @@
namespace {
-const int kHttpStatusContinue = 100;
-const int kHttpStatusBadRequest = 400;
-const int kHttpStatusDenied = 401;
-const int kHttpStatusForbidden = 403;
-const int kHttpStatusInternalServerError = 500;
-
-const char kGet[] = "GET";
-const char kPatch[] = "PATCH";
-const char kPost[] = "POST";
-const char kPut[] = "PUT";
-
std::pair<std::string, std::string> BuildAuthHeader(
const std::string& access_token_type,
const std::string& access_token) {
@@ -148,15 +137,13 @@
void SetFormData(
const std::vector<std::pair<std::string, std::string>>& data) {
data_ = chromeos::data_encoding::WebParamsEncode(data);
- mime_type_ = chromeos::mime::application::kWwwFormUrlEncoded;
+ mime_type_ = http::kWwwFormUrlEncoded;
}
void SetJsonData(const base::Value& json) {
std::string data;
CHECK(base::JSONWriter::Write(json, &data_));
- mime_type_ = chromeos::mime::AppendParameter(
- chromeos::mime::application::kJson,
- chromeos::mime::parameters::kCharset, "utf-8");
+ mime_type_ = http::kJsonUtf8;
}
private:
@@ -176,9 +163,10 @@
// Make sure we have a correct content type. Do not try to parse
// binary files, or HTML output. Limit to application/json and text/plain.
auto content_type =
- chromeos::mime::RemoveParameters(response.GetContentType());
- if (content_type != chromeos::mime::application::kJson &&
- content_type != chromeos::mime::text::kPlain) {
+ chromeos::string_utils::SplitAtFirst(response.GetContentType(), ";")
+ .first;
+
+ if (content_type != http::kJson && content_type != http::kPlain) {
chromeos::Error::AddTo(error, FROM_HERE, chromeos::errors::json::kDomain,
"non_json_content_type",
"Unexpected response content type: " + content_type);
@@ -213,7 +201,7 @@
bool IsSuccessful(const HttpClient::Response& response) {
int code = response.GetStatusCode();
- return code >= kHttpStatusContinue && code < kHttpStatusBadRequest;
+ return code >= http::kContinue && code < http::kBadRequest;
}
} // anonymous namespace
@@ -322,7 +310,7 @@
chromeos::ErrorPtr* error) {
int code = response.GetStatusCode();
auto resp = ParseJsonResponse(response, error);
- if (resp && code >= kHttpStatusBadRequest) {
+ if (resp && code >= http::kBadRequest) {
std::string error_code, error_message;
if (!resp->GetString("error", &error_code)) {
error_code = "unexpected_response";
@@ -373,7 +361,7 @@
auto shared_error_callback =
std::make_shared<CloudRequestErrorCallback>(error_callback);
- RequestSender sender{kPost, GetOAuthURL("token"), http_client_};
+ RequestSender sender{http::kPost, GetOAuthURL("token"), http_client_};
sender.SetFormData({
{"refresh_token", config_->refresh_token()},
{"client_id", config_->client_id()},
@@ -535,7 +523,7 @@
void DeviceRegistrationInfo::GetDeviceInfo(
const CloudRequestCallback& success_callback,
const CloudRequestErrorCallback& error_callback) {
- DoCloudRequest(weave::kGet, GetDeviceURL(), nullptr, success_callback,
+ DoCloudRequest(http::kGet, GetDeviceURL(), nullptr, success_callback,
error_callback);
}
@@ -554,7 +542,7 @@
auto url = GetServiceURL("registrationTickets/" + ticket_id,
{{"key", config_->api_key()}});
- RequestSender sender{kPatch, url, http_client_};
+ RequestSender sender{http::kPatch, url, http_client_};
sender.SetJsonData(req_json);
auto response = sender.SendAndBlock(error);
@@ -570,7 +558,7 @@
url = GetServiceURL("registrationTickets/" + ticket_id + "/finalize",
{{"key", config_->api_key()}});
- response = RequestSender{kPost, url, http_client_}.SendAndBlock(error);
+ response = RequestSender{http::kPost, url, http_client_}.SendAndBlock(error);
if (!response)
return std::string();
json_resp = ParseJsonResponse(*response, error);
@@ -598,7 +586,7 @@
UpdateDeviceInfoTimestamp(*device_draft_response);
// Now get access_token and refresh_token
- RequestSender sender2{kPost, GetOAuthURL("token"), http_client_};
+ RequestSender sender2{http::kPost, GetOAuthURL("token"), http_client_};
sender2.SetFormData(
{{"code", auth_code},
{"client_id", config_->client_id()},
@@ -686,13 +674,8 @@
return;
}
- using chromeos::mime::application::kJson;
- using chromeos::mime::parameters::kCharset;
- const std::string mime_type =
- chromeos::mime::AppendParameter(kJson, kCharset, "utf-8");
-
RequestSender sender{data->method, data->url, http_client_};
- sender.SetData(data->body, mime_type);
+ sender.SetData(data->body, http::kJsonUtf8);
sender.AddAuthHeader(access_token_);
int request_id =
sender.Send(base::Bind(&DeviceRegistrationInfo::OnCloudRequestSuccess,
@@ -709,7 +692,7 @@
int status_code = response.GetStatusCode();
VLOG(1) << "Response for cloud request with ID " << request_id
<< " received with status code " << status_code;
- if (status_code == kHttpStatusDenied) {
+ if (status_code == http::kDenied) {
cloud_backoff_entry_->InformOfRequest(true);
RefreshAccessToken(
base::Bind(&DeviceRegistrationInfo::OnAccessTokenRefreshed, AsWeakPtr(),
@@ -719,7 +702,7 @@
return;
}
- if (status_code >= kHttpStatusInternalServerError) {
+ if (status_code >= http::kInternalServerError) {
// Request was valid, but server failed, retry.
// TODO(antonm): Reconsider status codes, maybe only some require
// retry.
@@ -738,7 +721,7 @@
if (!IsSuccessful(response)) {
ParseGCDError(json_resp.get(), &error);
- if (status_code == kHttpStatusForbidden &&
+ if (status_code == http::kForbidden &&
error->HasError(kErrorDomainGCDServer, "rateLimitExceeded")) {
// If we exceeded server quota, retry the request later.
RetryCloudRequest(data);
@@ -885,7 +868,7 @@
const base::DictionaryValue& command_patch,
const base::Closure& on_success,
const base::Closure& on_error) {
- DoCloudRequest(weave::kPatch, GetServiceURL("commands/" + command_id),
+ DoCloudRequest(http::kPatch, GetServiceURL("commands/" + command_id),
&command_patch,
base::Bind(&IgnoreCloudResultWithCallback, on_success),
base::Bind(&IgnoreCloudErrorWithCallback, on_error));
@@ -962,7 +945,7 @@
{}, {{"lastUpdateTimeMs", last_device_resource_updated_timestamp_}});
DoCloudRequest(
- weave::kPut, url, device_resource.get(),
+ http::kPut, url, device_resource.get(),
base::Bind(&DeviceRegistrationInfo::OnUpdateDeviceResourceSuccess,
AsWeakPtr()),
base::Bind(&DeviceRegistrationInfo::OnUpdateDeviceResourceError,
@@ -1043,7 +1026,7 @@
const base::Callback<void(const base::ListValue&)>& on_success,
const CloudRequestErrorCallback& on_failure) {
DoCloudRequest(
- weave::kGet,
+ http::kGet,
GetServiceURL("commands/queue", {{"deviceId", config_->device_id()}}),
nullptr, base::Bind(&HandleFetchCommandsResult, on_success), on_failure);
}
@@ -1079,7 +1062,7 @@
std::unique_ptr<base::DictionaryValue> cmd_copy{command_dict->DeepCopy()};
cmd_copy->SetString("state", "aborted");
// TODO(wiley) We could consider handling this error case more gracefully.
- DoCloudRequest(weave::kPut, GetServiceURL("commands/" + command_id),
+ DoCloudRequest(http::kPut, GetServiceURL("commands/" + command_id),
cmd_copy.get(), base::Bind(&IgnoreCloudResult),
base::Bind(&IgnoreCloudError));
} else {
@@ -1171,7 +1154,7 @@
device_state_update_pending_ = true;
DoCloudRequest(
- weave::kPost, GetDeviceURL("patchState"), &body,
+ http::kPost, GetDeviceURL("patchState"), &body,
base::Bind(&DeviceRegistrationInfo::OnPublishStateSuccess, AsWeakPtr(),
update_id),
base::Bind(&DeviceRegistrationInfo::OnPublishStateError, AsWeakPtr()));
diff --git a/libweave/src/device_registration_info_unittest.cc b/libweave/src/device_registration_info_unittest.cc
index d76d9eb..72db07e 100644
--- a/libweave/src/device_registration_info_unittest.cc
+++ b/libweave/src/device_registration_info_unittest.cc
@@ -11,7 +11,6 @@
#include <base/values.h>
#include <chromeos/bind_lambda.h>
#include <chromeos/key_value_store.h>
-#include <chromeos/mime_utils.h>
#include <gtest/gtest.h>
#include <weave/mock_http_client.h>
diff --git a/libweave/src/http_constants.cc b/libweave/src/http_constants.cc
new file mode 100644
index 0000000..c409c1a
--- /dev/null
+++ b/libweave/src/http_constants.cc
@@ -0,0 +1,24 @@
+// Copyright 2015 The Chromium OS 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 "libweave/src/http_constants.h"
+
+namespace weave {
+namespace http {
+
+const char kGet[] = "GET";
+const char kPatch[] = "PATCH";
+const char kPost[] = "POST";
+const char kPut[] = "PUT";
+
+const char kAuthorization[] = "Authorization";
+const char kContentType[] = "Content-Type";
+
+const char kJson[] = "application/json";
+const char kJsonUtf8[] = "application/json; charset=utf-8";
+const char kPlain[] = "text/plain";
+const char kWwwFormUrlEncoded[] = "application/x-www-form-urlencoded";
+
+} // namespace http
+} // namespace weave
diff --git a/libweave/src/http_constants.h b/libweave/src/http_constants.h
new file mode 100644
index 0000000..f219a3c
--- /dev/null
+++ b/libweave/src/http_constants.h
@@ -0,0 +1,37 @@
+// Copyright 2015 The Chromium OS Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef LIBWEAVE_SRC_HTTP_CONSTANTS_H_
+#define LIBWEAVE_SRC_HTTP_CONSTANTS_H_
+
+namespace weave {
+namespace http {
+
+const int kContinue = 100;
+const int kOk = 200;
+const int kBadRequest = 400;
+const int kDenied = 401;
+const int kForbidden = 403;
+const int kNotFound = 404;
+const int kInternalServerError = 500;
+const int kServiceUnavailable = 503;
+const int kNotSupported = 501;
+
+extern const char kGet[];
+extern const char kPatch[];
+extern const char kPost[];
+extern const char kPut[];
+
+extern const char kAuthorization[];
+extern const char kContentType[];
+
+extern const char kJson[];
+extern const char kJsonUtf8[];
+extern const char kPlain[];
+extern const char kWwwFormUrlEncoded[];
+
+} // namespace http
+} // namespace weave
+
+#endif // LIBWEAVE_SRC_HTTP_CONSTANTS_H_
diff --git a/libweave/src/privet/privet_handler.cc b/libweave/src/privet/privet_handler.cc
index 25f8008..04fc8d2 100644
--- a/libweave/src/privet/privet_handler.cc
+++ b/libweave/src/privet/privet_handler.cc
@@ -15,10 +15,10 @@
#include <base/strings/string_number_conversions.h>
#include <base/strings/stringprintf.h>
#include <base/values.h>
-#include <chromeos/http/http_request.h>
#include <chromeos/strings/string_utils.h>
#include <weave/enum_to_string.h>
+#include "libweave/src/http_constants.h"
#include "libweave/src/privet/cloud_delegate.h"
#include "libweave/src/privet/constants.h"
#include "libweave/src/privet/device_delegate.h"
@@ -126,25 +126,24 @@
const char* const reason;
int code;
} kReasonToCode[] = {
- {errors::kInvalidClientCommitment, chromeos::http::status_code::Forbidden},
- {errors::kInvalidFormat, chromeos::http::status_code::BadRequest},
- {errors::kMissingAuthorization, chromeos::http::status_code::Denied},
- {errors::kInvalidAuthorization, chromeos::http::status_code::Denied},
- {errors::kInvalidAuthorizationScope,
- chromeos::http::status_code::Forbidden},
- {errors::kAuthorizationExpired, chromeos::http::status_code::Forbidden},
- {errors::kCommitmentMismatch, chromeos::http::status_code::Forbidden},
- {errors::kUnknownSession, chromeos::http::status_code::NotFound},
- {errors::kInvalidAuthCode, chromeos::http::status_code::Forbidden},
- {errors::kInvalidAuthMode, chromeos::http::status_code::BadRequest},
- {errors::kInvalidRequestedScope, chromeos::http::status_code::BadRequest},
- {errors::kAccessDenied, chromeos::http::status_code::Forbidden},
- {errors::kInvalidParams, chromeos::http::status_code::BadRequest},
- {errors::kSetupUnavailable, chromeos::http::status_code::BadRequest},
- {errors::kDeviceBusy, chromeos::http::status_code::ServiceUnavailable},
- {errors::kInvalidState, chromeos::http::status_code::InternalServerError},
- {errors::kNotFound, chromeos::http::status_code::NotFound},
- {errors::kNotImplemented, chromeos::http::status_code::NotSupported},
+ {errors::kInvalidClientCommitment, http::kForbidden},
+ {errors::kInvalidFormat, http::kBadRequest},
+ {errors::kMissingAuthorization, http::kDenied},
+ {errors::kInvalidAuthorization, http::kDenied},
+ {errors::kInvalidAuthorizationScope, http::kForbidden},
+ {errors::kAuthorizationExpired, http::kForbidden},
+ {errors::kCommitmentMismatch, http::kForbidden},
+ {errors::kUnknownSession, http::kNotFound},
+ {errors::kInvalidAuthCode, http::kForbidden},
+ {errors::kInvalidAuthMode, http::kBadRequest},
+ {errors::kInvalidRequestedScope, http::kBadRequest},
+ {errors::kAccessDenied, http::kForbidden},
+ {errors::kInvalidParams, http::kBadRequest},
+ {errors::kSetupUnavailable, http::kBadRequest},
+ {errors::kDeviceBusy, http::kServiceUnavailable},
+ {errors::kInvalidState, http::kInternalServerError},
+ {errors::kNotFound, http::kNotFound},
+ {errors::kNotImplemented, http::kNotSupported},
};
AuthScope AuthScopeFromString(const std::string& scope, AuthScope auto_scope) {
@@ -202,7 +201,7 @@
void ReturnError(const chromeos::Error& error,
const PrivetHandler::RequestCallback& callback) {
- int code = chromeos::http::status_code::InternalServerError;
+ int code = http::kInternalServerError;
for (const auto& it : kReasonToCode) {
if (error.HasError(errors::kDomain, it.reason)) {
code = it.code;
@@ -216,7 +215,7 @@
void OnCommandRequestSucceeded(const PrivetHandler::RequestCallback& callback,
const base::DictionaryValue& output) {
- callback.Run(chromeos::http::status_code::Ok, output);
+ callback.Run(http::kOk, output);
}
void OnCommandRequestFailed(const PrivetHandler::RequestCallback& callback,
@@ -523,7 +522,7 @@
output.SetInteger(kInfoUptimeKey, device_->GetUptime().InSeconds());
- callback.Run(chromeos::http::status_code::Ok, output);
+ callback.Run(http::kOk, output);
}
void PrivetHandler::HandlePairingStart(const base::DictionaryValue& input,
@@ -563,7 +562,7 @@
base::DictionaryValue output;
output.SetString(kPairingSessionIdKey, id);
output.SetString(kPairingDeviceCommitmentKey, commitment);
- callback.Run(chromeos::http::status_code::Ok, output);
+ callback.Run(http::kOk, output);
}
void PrivetHandler::HandlePairingConfirm(const base::DictionaryValue& input,
@@ -586,7 +585,7 @@
base::DictionaryValue output;
output.SetString(kPairingFingerprintKey, fingerprint);
output.SetString(kPairingSignatureKey, signature);
- callback.Run(chromeos::http::status_code::Ok, output);
+ callback.Run(http::kOk, output);
}
void PrivetHandler::HandlePairingCancel(const base::DictionaryValue& input,
@@ -600,7 +599,7 @@
return ReturnError(*error, callback);
base::DictionaryValue output;
- callback.Run(chromeos::http::status_code::Ok, output);
+ callback.Run(http::kOk, output);
}
void PrivetHandler::HandleAuth(const base::DictionaryValue& input,
@@ -661,7 +660,7 @@
output.SetString(kAuthTokenTypeKey, kAuthorizationHeaderPrefix);
output.SetInteger(kAuthExpiresInKey, kAccessTokenExpirationSeconds);
output.SetString(kAuthScopeKey, EnumToString(requested_auth_scope));
- callback.Run(chromeos::http::status_code::Ok, output);
+ callback.Run(http::kOk, output);
}
void PrivetHandler::HandleSetupStart(const base::DictionaryValue& input,
@@ -768,7 +767,7 @@
}
}
- callback.Run(chromeos::http::status_code::Ok, output);
+ callback.Run(http::kOk, output);
}
void PrivetHandler::HandleState(const base::DictionaryValue& input,
@@ -779,7 +778,7 @@
output.Set(kStateKey, defs);
output.SetString(kFingerprintKey, base::IntToString(state_fingerprint_));
- callback.Run(chromeos::http::status_code::Ok, output);
+ callback.Run(http::kOk, output);
}
void PrivetHandler::HandleCommandDefs(const base::DictionaryValue& input,
@@ -791,7 +790,7 @@
output.SetString(kFingerprintKey,
base::IntToString(command_defs_fingerprint_));
- callback.Run(chromeos::http::status_code::Ok, output);
+ callback.Run(http::kOk, output);
}
void PrivetHandler::HandleCommandsExecute(const base::DictionaryValue& input,
diff --git a/libweave/src/privet/privet_handler_unittest.cc b/libweave/src/privet/privet_handler_unittest.cc
index 5ce3caf..d9877a1 100644
--- a/libweave/src/privet/privet_handler_unittest.cc
+++ b/libweave/src/privet/privet_handler_unittest.cc
@@ -14,7 +14,6 @@
#include <base/run_loop.h>
#include <base/strings/string_util.h>
#include <base/values.h>
-#include <chromeos/http/http_request.h>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
@@ -182,15 +181,15 @@
void HandlerCallback(int status, const base::DictionaryValue& output) {
output_.MergeDictionary(&output);
if (!output_.HasKey("error")) {
- EXPECT_EQ(chromeos::http::status_code::Ok, status);
+ EXPECT_EQ(200, status);
return;
}
- EXPECT_NE(chromeos::http::status_code::Ok, status);
+ EXPECT_NE(200, status);
output_.SetInteger("error.http_status", status);
}
static void HandlerNoFound(int status, const base::DictionaryValue&) {
- EXPECT_EQ(status, 404);
+ EXPECT_EQ(404, status);
}
base::MessageLoop message_loop_;
diff --git a/libweave/src/privet/privet_manager.cc b/libweave/src/privet/privet_manager.cc
index 2f35fd9..c5b2fb8 100644
--- a/libweave/src/privet/privet_manager.cc
+++ b/libweave/src/privet/privet_manager.cc
@@ -17,14 +17,13 @@
#include <base/strings/string_number_conversions.h>
#include <base/values.h>
#include <chromeos/flag_helper.h>
-#include <chromeos/http/http_request.h>
#include <chromeos/key_value_store.h>
-#include <chromeos/mime_utils.h>
#include <chromeos/strings/string_utils.h>
#include <chromeos/syslog_logging.h>
#include <weave/network.h>
#include "libweave/src/device_registration_info.h"
+#include "libweave/src/http_constants.h"
#include "libweave/src/privet/cloud_delegate.h"
#include "libweave/src/privet/constants.h"
#include "libweave/src/privet/device_delegate.h"
@@ -112,8 +111,7 @@
void Manager::PrivetRequestHandler(
const HttpServer::Request& request,
const HttpServer::OnReplyCallback& callback) {
- std::string auth_header =
- request.GetFirstHeader(chromeos::http::request_header::kAuthorization);
+ std::string auth_header = request.GetFirstHeader(http::kAuthorization);
if (auth_header.empty() && disable_security_)
auth_header = "Privet anonymous";
std::string data(request.GetData().begin(), request.GetData().end());
@@ -123,9 +121,11 @@
std::unique_ptr<base::Value> value;
const base::DictionaryValue* dictionary = ∅
- std::string content_type = chromeos::mime::RemoveParameters(
- request.GetFirstHeader(chromeos::http::request_header::kContentType));
- if (content_type == chromeos::mime::application::kJson) {
+ std::string content_type =
+ chromeos::string_utils::SplitAtFirst(
+ request.GetFirstHeader(http::kContentType), ";")
+ .first;
+ if (content_type == http::kJson) {
value.reset(base::JSONReader::Read(data).release());
if (value)
value->GetAsDictionary(&dictionary);
@@ -144,13 +144,12 @@
std::string data;
base::JSONWriter::WriteWithOptions(
output, base::JSONWriter::OPTIONS_PRETTY_PRINT, &data);
- callback.Run(status, data, chromeos::mime::application::kJson);
+ callback.Run(status, data, http::kJson);
}
void Manager::HelloWorldHandler(const HttpServer::Request& request,
const HttpServer::OnReplyCallback& callback) {
- callback.Run(chromeos::http::status_code::Ok, "Hello, world!",
- chromeos::mime::text::kPlain);
+ callback.Run(http::kOk, "Hello, world!", http::kPlain);
}
void Manager::OnChanged() {