1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/public/browser/navigation_throttle.h"
6
7 #include "content/browser/frame_host/navigation_request.h"
8
9 namespace content {
10
11 namespace {
12
DefaultNetErrorCode(NavigationThrottle::ThrottleAction action)13 net::Error DefaultNetErrorCode(NavigationThrottle::ThrottleAction action) {
14 switch (action) {
15 case NavigationThrottle::PROCEED:
16 case NavigationThrottle::DEFER:
17 return net::OK;
18 case NavigationThrottle::CANCEL:
19 case NavigationThrottle::CANCEL_AND_IGNORE:
20 return net::ERR_ABORTED;
21 case NavigationThrottle::BLOCK_REQUEST:
22 case NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE:
23 return net::ERR_BLOCKED_BY_CLIENT;
24 case NavigationThrottle::BLOCK_RESPONSE:
25 return net::ERR_BLOCKED_BY_RESPONSE;
26 default:
27 NOTREACHED();
28 return net::ERR_UNEXPECTED;
29 }
30 }
31
32 } // namespace
33
ThrottleCheckResult(NavigationThrottle::ThrottleAction action)34 NavigationThrottle::ThrottleCheckResult::ThrottleCheckResult(
35 NavigationThrottle::ThrottleAction action)
36 : NavigationThrottle::ThrottleCheckResult(action,
37 DefaultNetErrorCode(action),
38 base::nullopt) {}
39
ThrottleCheckResult(NavigationThrottle::ThrottleAction action,net::Error net_error_code)40 NavigationThrottle::ThrottleCheckResult::ThrottleCheckResult(
41 NavigationThrottle::ThrottleAction action,
42 net::Error net_error_code)
43 : NavigationThrottle::ThrottleCheckResult(action,
44 net_error_code,
45 base::nullopt) {}
46
ThrottleCheckResult(NavigationThrottle::ThrottleAction action,net::Error net_error_code,base::Optional<std::string> error_page_content)47 NavigationThrottle::ThrottleCheckResult::ThrottleCheckResult(
48 NavigationThrottle::ThrottleAction action,
49 net::Error net_error_code,
50 base::Optional<std::string> error_page_content)
51 : action_(action),
52 net_error_code_(net_error_code),
53 error_page_content_(error_page_content) {}
54
55 NavigationThrottle::ThrottleCheckResult::ThrottleCheckResult(
56 const ThrottleCheckResult& other) = default;
57
~ThrottleCheckResult()58 NavigationThrottle::ThrottleCheckResult::~ThrottleCheckResult() {}
59
NavigationThrottle(NavigationHandle * navigation_handle)60 NavigationThrottle::NavigationThrottle(NavigationHandle* navigation_handle)
61 : navigation_handle_(navigation_handle) {}
62
~NavigationThrottle()63 NavigationThrottle::~NavigationThrottle() {}
64
WillStartRequest()65 NavigationThrottle::ThrottleCheckResult NavigationThrottle::WillStartRequest() {
66 return NavigationThrottle::PROCEED;
67 }
68
69 NavigationThrottle::ThrottleCheckResult
WillRedirectRequest()70 NavigationThrottle::WillRedirectRequest() {
71 return NavigationThrottle::PROCEED;
72 }
73
WillFailRequest()74 NavigationThrottle::ThrottleCheckResult NavigationThrottle::WillFailRequest() {
75 return NavigationThrottle::PROCEED;
76 }
77
78 NavigationThrottle::ThrottleCheckResult
WillProcessResponse()79 NavigationThrottle::WillProcessResponse() {
80 return NavigationThrottle::PROCEED;
81 }
82
Resume()83 void NavigationThrottle::Resume() {
84 if (resume_callback_) {
85 resume_callback_.Run();
86 return;
87 }
88 NavigationRequest::From(navigation_handle_)->Resume(this);
89 }
90
CancelDeferredNavigation(NavigationThrottle::ThrottleCheckResult result)91 void NavigationThrottle::CancelDeferredNavigation(
92 NavigationThrottle::ThrottleCheckResult result) {
93 if (cancel_deferred_navigation_callback_) {
94 cancel_deferred_navigation_callback_.Run(result);
95 return;
96 }
97 NavigationRequest::From(navigation_handle_)
98 ->CancelDeferredNavigation(this, result);
99 }
100
101 } // namespace content
102