blob: 3aa218f724bf3a327dee881cb8cdfba44c75c5e3 [file] [log] [blame]
// 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 "remoting/test/app_remoting_report_issue_request.h"
#include "base/bind.h"
#include "base/callback_helpers.h"
#include "base/logging.h"
#include "base/threading/thread_task_runner_handle.h"
#include "net/http/http_response_headers.h"
#include "net/http/http_status_code.h"
#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
#include "net/url_request/url_fetcher.h"
#include "remoting/base/url_request_context_getter.h"
namespace {
const char kRequestTestOrigin[] =
"Origin: chrome-extension://ljacajndfccfgnfohlgkdphmbnpkjflk";
}
namespace remoting {
namespace test {
AppRemotingReportIssueRequest::AppRemotingReportIssueRequest() = default;
AppRemotingReportIssueRequest::~AppRemotingReportIssueRequest() = default;
bool AppRemotingReportIssueRequest::Start(
const std::string& application_id,
const std::string& host_id,
const std::string& access_token,
ServiceEnvironment service_environment,
bool abandon_host,
base::Closure done_callback) {
DCHECK(request_complete_callback_.is_null()) << "Request pending";
VLOG(2) << "AppRemotingReportIssueRequest::Start() called";
std::string service_url(
GetReportIssueUrl(application_id, host_id, service_environment));
if (service_url.empty()) {
LOG(ERROR) << "Unrecognized service type: " << service_environment;
return false;
}
VLOG(1) << "Sending Report Issue service request to: " << service_url;
request_complete_callback_ = done_callback;
request_context_getter_ = new remoting::URLRequestContextGetter(
base::ThreadTaskRunnerHandle::Get(), // network_runner
base::ThreadTaskRunnerHandle::Get()); // file_runner
std::string upload_data = abandon_host ? "{ 'abandonHost': 'true' }" : "{}";
request_ = net::URLFetcher::Create(GURL(service_url), net::URLFetcher::POST,
this, TRAFFIC_ANNOTATION_FOR_TESTS);
request_->SetRequestContext(request_context_getter_.get());
request_->AddExtraRequestHeader("Authorization: OAuth " + access_token);
request_->AddExtraRequestHeader(kRequestTestOrigin);
request_->SetUploadData("application/json; charset=UTF-8", upload_data);
request_->Start();
return true;
}
void AppRemotingReportIssueRequest::OnURLFetchComplete(
const net::URLFetcher* source) {
VLOG(2) << "URL Fetch Completed for: " << source->GetOriginalURL();
int response_code = request_->GetResponseCode();
if (response_code != net::HTTP_OK && response_code != net::HTTP_NO_CONTENT) {
LOG(ERROR) << "ReportIssue request failed with error code: "
<< response_code;
}
base::ResetAndReturn(&request_complete_callback_).Run();
}
} // namespace test
} // namespace remoting