| Index: extensions/browser/api/web_request/web_request_api.cc
|
| diff --git a/extensions/browser/api/web_request/web_request_api.cc b/extensions/browser/api/web_request/web_request_api.cc
|
| index e5cb4cbf13e047581194e448c1cd94eb9c1ab456..b81023248535d3064adaf563327f06568d444b64 100644
|
| --- a/extensions/browser/api/web_request/web_request_api.cc
|
| +++ b/extensions/browser/api/web_request/web_request_api.cc
|
| @@ -352,6 +352,13 @@ bool IsPublicSession() {
|
| return false;
|
| }
|
|
|
| +// Returns event details for a given request.
|
| +std::unique_ptr<WebRequestEventDetails> CreateEventDetails(
|
| + const net::URLRequest* request,
|
| + int extra_info_spec) {
|
| + return base::MakeUnique<WebRequestEventDetails>(request, extra_info_spec);
|
| +}
|
| +
|
| } // namespace
|
|
|
| WebRequestAPI::WebRequestAPI(content::BrowserContext* context)
|
| @@ -493,10 +500,10 @@ bool ExtensionWebRequestEventRouter::RequestFilter::InitFromValue(
|
| return false;
|
| for (size_t i = 0; i < urls_value->GetSize(); ++i) {
|
| std::string url;
|
| - URLPattern pattern(
|
| - URLPattern::SCHEME_HTTP | URLPattern::SCHEME_HTTPS |
|
| - URLPattern::SCHEME_FTP | URLPattern::SCHEME_FILE |
|
| - URLPattern::SCHEME_EXTENSION);
|
| + URLPattern pattern(URLPattern::SCHEME_HTTP | URLPattern::SCHEME_HTTPS |
|
| + URLPattern::SCHEME_FTP | URLPattern::SCHEME_FILE |
|
| + URLPattern::SCHEME_EXTENSION |
|
| + URLPattern::SCHEME_WS | URLPattern::SCHEME_WSS);
|
| if (!urls_value->GetString(i, &url) ||
|
| pattern.Parse(url) != URLPattern::PARSE_SUCCESS) {
|
| *error = ErrorUtils::FormatErrorMessage(
|
| @@ -578,16 +585,6 @@ void ExtensionWebRequestEventRouter::RegisterRulesRegistry(
|
| rules_registries_.erase(key);
|
| }
|
|
|
| -std::unique_ptr<WebRequestEventDetails>
|
| -ExtensionWebRequestEventRouter::CreateEventDetails(
|
| - const net::URLRequest* request,
|
| - int extra_info_spec) {
|
| - std::unique_ptr<WebRequestEventDetails> event_details(
|
| - new WebRequestEventDetails(request, extra_info_spec));
|
| -
|
| - return event_details;
|
| -}
|
| -
|
| int ExtensionWebRequestEventRouter::OnBeforeRequest(
|
| void* browser_context,
|
| const InfoMap* extension_info_map,
|
| @@ -943,7 +940,8 @@ void ExtensionWebRequestEventRouter::OnCompleted(
|
| request_time_tracker_->LogRequestEndTime(request->identifier(),
|
| base::Time::Now());
|
|
|
| - DCHECK_EQ(net::OK, net_error);
|
| + // See comment in OnErrorOccurred regarding net::ERR_WS_UPGRADE.
|
| + DCHECK(net_error == net::OK || net_error == net::ERR_WS_UPGRADE);
|
|
|
| DCHECK(!GetAndSetSignaled(request->identifier(), kOnCompleted));
|
|
|
| @@ -981,6 +979,14 @@ void ExtensionWebRequestEventRouter::OnErrorOccurred(
|
| net::URLRequest* request,
|
| bool started,
|
| int net_error) {
|
| + // When WebSocket handshake request finishes, URLRequest is cancelled with an
|
| + // ERR_WS_UPGRADE code (see WebSocketStreamRequestImpl::PerformUpgrade).
|
| + // WebRequest API reports this as a completed request.
|
| + if (net_error == net::ERR_WS_UPGRADE) {
|
| + OnCompleted(browser_context, extension_info_map, request, net_error);
|
| + return;
|
| + }
|
| +
|
| ExtensionsBrowserClient* client = ExtensionsBrowserClient::Get();
|
| if (!client) {
|
| // |client| could be NULL during shutdown.
|
| @@ -1806,10 +1812,8 @@ int ExtensionWebRequestEventRouter::ExecuteDeltas(
|
| if (blocked_request.event == kOnBeforeRequest) {
|
| CHECK(!blocked_request.callback.is_null());
|
| helpers::MergeOnBeforeRequestResponses(
|
| - blocked_request.response_deltas,
|
| - blocked_request.new_url,
|
| - &warnings,
|
| - blocked_request.net_log);
|
| + blocked_request.request->url(), blocked_request.response_deltas,
|
| + blocked_request.new_url, &warnings, blocked_request.net_log);
|
| } else if (blocked_request.event == kOnBeforeSendHeaders) {
|
| CHECK(!blocked_request.callback.is_null());
|
| helpers::MergeOnBeforeSendHeadersResponses(
|
| @@ -1820,12 +1824,10 @@ int ExtensionWebRequestEventRouter::ExecuteDeltas(
|
| } else if (blocked_request.event == kOnHeadersReceived) {
|
| CHECK(!blocked_request.callback.is_null());
|
| helpers::MergeOnHeadersReceivedResponses(
|
| - blocked_request.response_deltas,
|
| + blocked_request.request->url(), blocked_request.response_deltas,
|
| blocked_request.original_response_headers.get(),
|
| - blocked_request.override_response_headers,
|
| - blocked_request.new_url,
|
| - &warnings,
|
| - blocked_request.net_log);
|
| + blocked_request.override_response_headers, blocked_request.new_url,
|
| + &warnings, blocked_request.net_log);
|
| } else if (blocked_request.event == kOnAuthRequired) {
|
| CHECK(blocked_request.callback.is_null());
|
| CHECK(!blocked_request.auth_callback.is_null());
|
|
|