Commit e2a68506 authored by Hidy Han's avatar Hidy Han Committed by Commit Bot

Use DevToolsStatus enum to distinguish DevTools-handled redirects from request...

Use DevToolsStatus enum to distinguish DevTools-handled redirects from request failures. Fix some typos.

Change-Id: If32f061c76f44fa830ec701ffbf01d88963d1b9c
Reviewed-on: https://chromium-review.googlesource.com/959587
Commit-Queue: Hidy Han <hidyhan@chromium.org>
Reviewed-by: default avatarDmitry Gozman <dgozman@chromium.org>
Reviewed-by: default avatarAlex Clarke <alexclarke@chromium.org>
Cr-Commit-Position: refs/heads/master@{#542912}
parent 367087b7
...@@ -448,6 +448,8 @@ int DevToolsURLInterceptorRequestJob::MockResponseDetails::ReadRawData( ...@@ -448,6 +448,8 @@ int DevToolsURLInterceptorRequestJob::MockResponseDetails::ReadRawData(
namespace { namespace {
using DevToolsStatus = ResourceRequestInfoImpl::DevToolsStatus;
void SendPendingBodyRequestsOnUiThread( void SendPendingBodyRequestsOnUiThread(
std::vector<std::unique_ptr< std::vector<std::unique_ptr<
protocol::Network::Backend::GetResponseBodyForInterceptionCallback>> protocol::Network::Backend::GetResponseBodyForInterceptionCallback>>
...@@ -522,6 +524,14 @@ std::unique_ptr<net::UploadDataStream> GetUploadData(net::URLRequest* request) { ...@@ -522,6 +524,14 @@ std::unique_ptr<net::UploadDataStream> GetUploadData(net::URLRequest* request) {
std::move(proxy_readers), 0); std::move(proxy_readers), 0);
} }
void SetDevToolsStatus(net::URLRequest* request,
DevToolsStatus devtools_status) {
ResourceRequestInfoImpl* resource_request_info =
ResourceRequestInfoImpl::ForRequest(request);
DCHECK(resource_request_info);
resource_request_info->set_devtools_status(devtools_status);
}
} // namespace } // namespace
DevToolsURLInterceptorRequestJob::DevToolsURLInterceptorRequestJob( DevToolsURLInterceptorRequestJob::DevToolsURLInterceptorRequestJob(
...@@ -711,7 +721,7 @@ void DevToolsURLInterceptorRequestJob::OnSubRequestAuthRequired( ...@@ -711,7 +721,7 @@ void DevToolsURLInterceptorRequestJob::OnSubRequestAuthRequired(
if (stage_to_intercept_ == InterceptionStage::DONT_INTERCEPT) { if (stage_to_intercept_ == InterceptionStage::DONT_INTERCEPT) {
// This should trigger default auth behavior. // This should trigger default auth behavior.
// See comment in ProcessAuthRespose. // See comment in ProcessAuthResponse.
NotifyHeadersComplete(); NotifyHeadersComplete();
return; return;
} }
...@@ -756,6 +766,8 @@ void DevToolsURLInterceptorRequestJob::OnSubRequestRedirectReceived( ...@@ -756,6 +766,8 @@ void DevToolsURLInterceptorRequestJob::OnSubRequestRedirectReceived(
bool* defer_redirect) { bool* defer_redirect) {
DCHECK_CURRENTLY_ON(BrowserThread::IO); DCHECK_CURRENTLY_ON(BrowserThread::IO);
DCHECK(sub_request_); DCHECK(sub_request_);
SetDevToolsStatus(sub_request_->request(),
DevToolsStatus::kCanceledAsRedirect);
// If we're not intercepting results or are a response then cancel this // If we're not intercepting results or are a response then cancel this
// redirect and tell the parent request it was redirected through |redirect_|. // redirect and tell the parent request it was redirected through |redirect_|.
...@@ -873,7 +885,7 @@ void DevToolsURLInterceptorRequestJob::StopIntercepting() { ...@@ -873,7 +885,7 @@ void DevToolsURLInterceptorRequestJob::StopIntercepting() {
case WaitingForUserResponse::WAITING_FOR_RESPONSE_ACK: case WaitingForUserResponse::WAITING_FOR_RESPONSE_ACK:
// Fallthough. // Fallthough.
case WaitingForUserResponse::WAITING_FOR_REQUEST_ACK: case WaitingForUserResponse::WAITING_FOR_REQUEST_ACK:
ProcessInterceptionRespose( ProcessInterceptionResponse(
std::make_unique<DevToolsNetworkInterceptor::Modifications>( std::make_unique<DevToolsNetworkInterceptor::Modifications>(
base::nullopt, base::nullopt, protocol::Maybe<std::string>(), base::nullopt, base::nullopt, protocol::Maybe<std::string>(),
protocol::Maybe<std::string>(), protocol::Maybe<std::string>(), protocol::Maybe<std::string>(), protocol::Maybe<std::string>(),
...@@ -887,7 +899,7 @@ void DevToolsURLInterceptorRequestJob::StopIntercepting() { ...@@ -887,7 +899,7 @@ void DevToolsURLInterceptorRequestJob::StopIntercepting() {
.SetResponse(protocol::Network::AuthChallengeResponse:: .SetResponse(protocol::Network::AuthChallengeResponse::
ResponseEnum::Default) ResponseEnum::Default)
.Build(); .Build();
ProcessAuthRespose( ProcessAuthResponse(
std::make_unique<DevToolsNetworkInterceptor::Modifications>( std::make_unique<DevToolsNetworkInterceptor::Modifications>(
base::nullopt, base::nullopt, protocol::Maybe<std::string>(), base::nullopt, base::nullopt, protocol::Maybe<std::string>(),
protocol::Maybe<std::string>(), protocol::Maybe<std::string>(), protocol::Maybe<std::string>(), protocol::Maybe<std::string>(),
...@@ -928,7 +940,7 @@ void DevToolsURLInterceptorRequestJob::ContinueInterceptedRequest( ...@@ -928,7 +940,7 @@ void DevToolsURLInterceptorRequestJob::ContinueInterceptedRequest(
"authChallengeResponse not expected."))); "authChallengeResponse not expected.")));
break; break;
} }
ProcessInterceptionRespose(std::move(modifications)); ProcessInterceptionResponse(std::move(modifications));
BrowserThread::PostTask( BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE, BrowserThread::UI, FROM_HERE,
base::BindOnce(&ContinueInterceptedRequestCallback::sendSuccess, base::BindOnce(&ContinueInterceptedRequestCallback::sendSuccess,
...@@ -945,7 +957,7 @@ void DevToolsURLInterceptorRequestJob::ContinueInterceptedRequest( ...@@ -945,7 +957,7 @@ void DevToolsURLInterceptorRequestJob::ContinueInterceptedRequest(
"authChallengeResponse required."))); "authChallengeResponse required.")));
break; break;
} }
if (ProcessAuthRespose(std::move(modifications))) { if (ProcessAuthResponse(std::move(modifications))) {
BrowserThread::PostTask( BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE, BrowserThread::UI, FROM_HERE,
base::BindOnce(&ContinueInterceptedRequestCallback::sendSuccess, base::BindOnce(&ContinueInterceptedRequestCallback::sendSuccess,
...@@ -1025,18 +1037,14 @@ DevToolsURLInterceptorRequestJob::BuildRequestInfo() { ...@@ -1025,18 +1037,14 @@ DevToolsURLInterceptorRequestJob::BuildRequestInfo() {
return result; return result;
} }
void DevToolsURLInterceptorRequestJob::ProcessInterceptionRespose( void DevToolsURLInterceptorRequestJob::ProcessInterceptionResponse(
std::unique_ptr<DevToolsNetworkInterceptor::Modifications> modifications) { std::unique_ptr<DevToolsNetworkInterceptor::Modifications> modifications) {
bool is_response_ack = waiting_for_user_response_ == bool is_response_ack = waiting_for_user_response_ ==
WaitingForUserResponse::WAITING_FOR_RESPONSE_ACK; WaitingForUserResponse::WAITING_FOR_RESPONSE_ACK;
waiting_for_user_response_ = WaitingForUserResponse::NOT_WAITING; waiting_for_user_response_ = WaitingForUserResponse::NOT_WAITING;
if (modifications->mark_as_canceled) { if (modifications->mark_as_canceled)
ResourceRequestInfoImpl* resource_request_info = SetDevToolsStatus(request(), DevToolsStatus::kCanceled);
ResourceRequestInfoImpl::ForRequest(request());
DCHECK(resource_request_info);
resource_request_info->set_canceled_by_devtools(true);
}
if (modifications->error_reason) { if (modifications->error_reason) {
if (sub_request_) { if (sub_request_) {
...@@ -1122,7 +1130,7 @@ void DevToolsURLInterceptorRequestJob::ProcessInterceptionRespose( ...@@ -1122,7 +1130,7 @@ void DevToolsURLInterceptorRequestJob::ProcessInterceptionRespose(
} }
} }
bool DevToolsURLInterceptorRequestJob::ProcessAuthRespose( bool DevToolsURLInterceptorRequestJob::ProcessAuthResponse(
std::unique_ptr<DevToolsNetworkInterceptor::Modifications> modifications) { std::unique_ptr<DevToolsNetworkInterceptor::Modifications> modifications) {
waiting_for_user_response_ = WaitingForUserResponse::NOT_WAITING; waiting_for_user_response_ = WaitingForUserResponse::NOT_WAITING;
......
...@@ -128,10 +128,10 @@ class DevToolsURLInterceptorRequestJob : public net::URLRequestJob { ...@@ -128,10 +128,10 @@ class DevToolsURLInterceptorRequestJob : public net::URLRequestJob {
const net::HttpResponseHeaders* GetHttpResponseHeaders() const; const net::HttpResponseHeaders* GetHttpResponseHeaders() const;
void ProcessRedirect(int status_code, const std::string& new_url); void ProcessRedirect(int status_code, const std::string& new_url);
void ProcessInterceptionRespose( void ProcessInterceptionResponse(
std::unique_ptr<DevToolsNetworkInterceptor::Modifications> modification); std::unique_ptr<DevToolsNetworkInterceptor::Modifications> modification);
bool ProcessAuthRespose( bool ProcessAuthResponse(
std::unique_ptr<DevToolsNetworkInterceptor::Modifications> modification); std::unique_ptr<DevToolsNetworkInterceptor::Modifications> modification);
enum class WaitingForUserResponse { enum class WaitingForUserResponse {
......
...@@ -182,7 +182,7 @@ ResourceRequestInfoImpl::ResourceRequestInfoImpl( ...@@ -182,7 +182,7 @@ ResourceRequestInfoImpl::ResourceRequestInfoImpl(
context_(context), context_(context),
report_raw_headers_(report_raw_headers), report_raw_headers_(report_raw_headers),
is_async_(is_async), is_async_(is_async),
canceled_by_devtools_(false), devtools_status_(DevToolsStatus::kNotCanceled),
previews_state_(previews_state), previews_state_(previews_state),
body_(body), body_(body),
initiated_in_secure_context_(initiated_in_secure_context), initiated_in_secure_context_(initiated_in_secure_context),
...@@ -319,8 +319,9 @@ NavigationUIData* ResourceRequestInfoImpl::GetNavigationUIData() const { ...@@ -319,8 +319,9 @@ NavigationUIData* ResourceRequestInfoImpl::GetNavigationUIData() const {
return navigation_ui_data_.get(); return navigation_ui_data_.get();
} }
bool ResourceRequestInfoImpl::CanceledByDevTools() const { ResourceRequestInfo::DevToolsStatus ResourceRequestInfoImpl::GetDevToolsStatus()
return canceled_by_devtools_; const {
return devtools_status_;
} }
base::StringPiece ResourceRequestInfoImpl::GetCustomCancelReason() const { base::StringPiece ResourceRequestInfoImpl::GetCustomCancelReason() const {
......
...@@ -103,7 +103,7 @@ class ResourceRequestInfoImpl : public ResourceRequestInfo, ...@@ -103,7 +103,7 @@ class ResourceRequestInfoImpl : public ResourceRequestInfo,
PreviewsState GetPreviewsState() const override; PreviewsState GetPreviewsState() const override;
bool ShouldReportRawHeaders() const; bool ShouldReportRawHeaders() const;
NavigationUIData* GetNavigationUIData() const override; NavigationUIData* GetNavigationUIData() const override;
bool CanceledByDevTools() const override; DevToolsStatus GetDevToolsStatus() const override;
base::StringPiece GetCustomCancelReason() const override; base::StringPiece GetCustomCancelReason() const override;
CONTENT_EXPORT void AssociateWithRequest(net::URLRequest* request); CONTENT_EXPORT void AssociateWithRequest(net::URLRequest* request);
...@@ -202,8 +202,8 @@ class ResourceRequestInfoImpl : public ResourceRequestInfo, ...@@ -202,8 +202,8 @@ class ResourceRequestInfoImpl : public ResourceRequestInfo,
on_transfer_ = on_transfer; on_transfer_ = on_transfer;
} }
void set_canceled_by_devtools(bool canceled_by_devtools) { void set_devtools_status(DevToolsStatus devtools_status) {
canceled_by_devtools_ = canceled_by_devtools; devtools_status_ = devtools_status;
} }
void SetBlobHandles(BlobHandles blob_handles); void SetBlobHandles(BlobHandles blob_handles);
...@@ -262,7 +262,7 @@ class ResourceRequestInfoImpl : public ResourceRequestInfo, ...@@ -262,7 +262,7 @@ class ResourceRequestInfoImpl : public ResourceRequestInfo,
ResourceContext* context_; ResourceContext* context_;
bool report_raw_headers_; bool report_raw_headers_;
bool is_async_; bool is_async_;
bool canceled_by_devtools_; DevToolsStatus devtools_status_;
PreviewsState previews_state_; PreviewsState previews_state_;
scoped_refptr<network::ResourceRequestBody> body_; scoped_refptr<network::ResourceRequestBody> body_;
bool initiated_in_secure_context_; bool initiated_in_secure_context_;
......
...@@ -175,8 +175,16 @@ class ResourceRequestInfo { ...@@ -175,8 +175,16 @@ class ResourceRequestInfo {
// UI thread at the beginning of navigation. // UI thread at the beginning of navigation.
virtual NavigationUIData* GetNavigationUIData() const = 0; virtual NavigationUIData* GetNavigationUIData() const = 0;
// Whether this request was canceled by DevTools. enum class DevToolsStatus {
virtual bool CanceledByDevTools() const = 0; kCanceled,
// DevTools can internally handle a redirect, so the url request may
// appear never done. Mark these cases.
kCanceledAsRedirect,
kNotCanceled,
};
// If and why this request was canceled by DevTools.
virtual DevToolsStatus GetDevToolsStatus() const = 0;
// When the client of a request decides to cancel it, it may optionally // When the client of a request decides to cancel it, it may optionally
// provide an application-defined description of the canncellation reason. // provide an application-defined description of the canncellation reason.
......
...@@ -396,10 +396,10 @@ void HeadlessBrowserContextImpl::NotifyChildContentsCreated( ...@@ -396,10 +396,10 @@ void HeadlessBrowserContextImpl::NotifyChildContentsCreated(
void HeadlessBrowserContextImpl::NotifyUrlRequestFailed( void HeadlessBrowserContextImpl::NotifyUrlRequestFailed(
net::URLRequest* request, net::URLRequest* request,
int net_error, int net_error,
bool canceled_by_devtools) { DevToolsStatus devtools_status) {
base::AutoLock lock(observers_lock_); base::AutoLock lock(observers_lock_);
for (auto& observer : observers_) for (auto& observer : observers_)
observer.UrlRequestFailed(request, net_error, canceled_by_devtools); observer.UrlRequestFailed(request, net_error, devtools_status);
} }
void HeadlessBrowserContextImpl::SetNetworkConditions( void HeadlessBrowserContextImpl::SetNetworkConditions(
......
...@@ -116,7 +116,7 @@ class HeadlessBrowserContextImpl : public HeadlessBrowserContext, ...@@ -116,7 +116,7 @@ class HeadlessBrowserContextImpl : public HeadlessBrowserContext,
// This will be called on the IO thread. // This will be called on the IO thread.
void NotifyUrlRequestFailed(net::URLRequest* request, void NotifyUrlRequestFailed(net::URLRequest* request,
int net_error, int net_error,
bool canceled_by_devtools); DevToolsStatus devtools_status);
void SetNetworkConditions(HeadlessNetworkConditions conditions); void SetNetworkConditions(HeadlessNetworkConditions conditions);
HeadlessNetworkConditions GetNetworkConditions() override; HeadlessNetworkConditions GetNetworkConditions() override;
......
...@@ -87,10 +87,10 @@ void HeadlessNetworkDelegate::OnCompleted(net::URLRequest* request, ...@@ -87,10 +87,10 @@ void HeadlessNetworkDelegate::OnCompleted(net::URLRequest* request,
if (!resource_request_info) if (!resource_request_info)
return; return;
bool canceled_by_devtools = resource_request_info->CanceledByDevTools(); DevToolsStatus devtools_status = resource_request_info->GetDevToolsStatus();
if (canceled_by_devtools || net_error != net::OK) { if (devtools_status != DevToolsStatus::kNotCanceled || net_error != net::OK) {
headless_browser_context_->NotifyUrlRequestFailed(request, net_error, headless_browser_context_->NotifyUrlRequestFailed(request, net_error,
canceled_by_devtools); devtools_status);
} }
} }
......
...@@ -1469,10 +1469,10 @@ class UrlRequestFailedTest : public HeadlessAsyncDevTooledBrowserTest, ...@@ -1469,10 +1469,10 @@ class UrlRequestFailedTest : public HeadlessAsyncDevTooledBrowserTest,
void UrlRequestFailed(net::URLRequest* request, void UrlRequestFailed(net::URLRequest* request,
int net_error, int net_error,
bool canceled_by_devtools) override { DevToolsStatus devtools_status) override {
base::AutoLock lock(lock_); base::AutoLock lock(lock_);
urls_that_failed_to_load_.push_back(request->url().ExtractFileName()); urls_that_failed_to_load_.push_back(request->url().ExtractFileName());
EXPECT_TRUE(canceled_by_devtools); EXPECT_TRUE(devtools_status != DevToolsStatus::kNotCanceled);
} }
virtual network::ErrorReason GetErrorReason() = 0; virtual network::ErrorReason GetErrorReason() = 0;
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include "base/callback.h" #include "base/callback.h"
#include "base/optional.h" #include "base/optional.h"
#include "content/public/browser/resource_request_info.h"
#include "content/public/common/web_preferences.h" #include "content/public/common/web_preferences.h"
#include "headless/lib/browser/headless_network_conditions.h" #include "headless/lib/browser/headless_network_conditions.h"
#include "headless/public/headless_export.h" #include "headless/public/headless_export.h"
...@@ -32,6 +33,8 @@ class HeadlessBrowserContextOptions; ...@@ -32,6 +33,8 @@ class HeadlessBrowserContextOptions;
// Builder::SetOverrideWebPreferencesCallback(). // Builder::SetOverrideWebPreferencesCallback().
using content::WebPreferences; using content::WebPreferences;
using DevToolsStatus = content::ResourceRequestInfo::DevToolsStatus;
using ProtocolHandlerMap = std::unordered_map< using ProtocolHandlerMap = std::unordered_map<
std::string, std::string,
std::unique_ptr<net::URLRequestJobFactory::ProtocolHandler>>; std::unique_ptr<net::URLRequestJobFactory::ProtocolHandler>>;
...@@ -91,7 +94,7 @@ class HEADLESS_EXPORT HeadlessBrowserContext::Observer { ...@@ -91,7 +94,7 @@ class HEADLESS_EXPORT HeadlessBrowserContext::Observer {
// delivered on the IO thread. // delivered on the IO thread.
virtual void UrlRequestFailed(net::URLRequest* request, virtual void UrlRequestFailed(net::URLRequest* request,
int net_error, int net_error,
bool canceled_by_devtools) {} DevToolsStatus devtools_status) {}
// Indicates the HeadlessBrowserContext is about to be deleted. // Indicates the HeadlessBrowserContext is about to be deleted.
virtual void OnHeadlessBrowserContextDestruct() {} virtual void OnHeadlessBrowserContextDestruct() {}
......
...@@ -161,8 +161,8 @@ void HeadlessRenderTest::OverrideWebPreferences(WebPreferences* preferences) { ...@@ -161,8 +161,8 @@ void HeadlessRenderTest::OverrideWebPreferences(WebPreferences* preferences) {
void HeadlessRenderTest::UrlRequestFailed(net::URLRequest* request, void HeadlessRenderTest::UrlRequestFailed(net::URLRequest* request,
int net_error, int net_error,
bool canceled_by_devtools) { DevToolsStatus devtools_status) {
if (canceled_by_devtools) if (devtools_status != DevToolsStatus::kNotCanceled)
return; return;
ADD_FAILURE() << "Network request failed: " << net_error << " for " ADD_FAILURE() << "Network request failed: " << net_error << " for "
<< request->url().spec(); << request->url().spec();
......
...@@ -90,7 +90,7 @@ class HeadlessRenderTest : public HeadlessAsyncDevTooledBrowserTest, ...@@ -90,7 +90,7 @@ class HeadlessRenderTest : public HeadlessAsyncDevTooledBrowserTest,
// HeadlessBrowserContext::Observer // HeadlessBrowserContext::Observer
void UrlRequestFailed(net::URLRequest* request, void UrlRequestFailed(net::URLRequest* request,
int net_error, int net_error,
bool canceled_by_devtools) override; DevToolsStatus devtools_status) override;
// page::ExperimentalObserver implementation: // page::ExperimentalObserver implementation:
void OnLoadEventFired(const page::LoadEventFiredParams& params) override; void OnLoadEventFired(const page::LoadEventFiredParams& params) override;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment