blob: 6ad520c0da21e61a041bd9a71644512d7e5ff111 [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.
#import "ios/web/public/navigation/web_state_policy_decider.h"
#import "ios/web/public/web_state.h"
#import "ios/web/web_state/web_state_impl.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
namespace web {
// static
WebStatePolicyDecider::PolicyDecision
WebStatePolicyDecider::PolicyDecision::Allow() {
return WebStatePolicyDecider::PolicyDecision(
WebStatePolicyDecider::PolicyDecision::Decision::kAllow, /*error=*/nil);
}
// static
WebStatePolicyDecider::PolicyDecision
WebStatePolicyDecider::PolicyDecision::Cancel() {
return WebStatePolicyDecider::PolicyDecision(
WebStatePolicyDecider::PolicyDecision::Decision::kCancel, /*error=*/nil);
}
// static
WebStatePolicyDecider::PolicyDecision
WebStatePolicyDecider::PolicyDecision::CancelAndDisplayError(NSError* error) {
return WebStatePolicyDecider::PolicyDecision(
WebStatePolicyDecider::PolicyDecision::Decision::kCancelAndDisplayError,
error);
}
bool WebStatePolicyDecider::PolicyDecision::ShouldAllowNavigation() const {
return decision == WebStatePolicyDecider::PolicyDecision::Decision::kAllow;
}
bool WebStatePolicyDecider::PolicyDecision::ShouldCancelNavigation() const {
return !ShouldAllowNavigation();
}
bool WebStatePolicyDecider::PolicyDecision::ShouldDisplayError() const {
return decision == WebStatePolicyDecider::PolicyDecision::Decision::
kCancelAndDisplayError;
}
NSError* WebStatePolicyDecider::PolicyDecision::GetDisplayError() const {
return error;
}
WebStatePolicyDecider::WebStatePolicyDecider(WebState* web_state)
: web_state_(web_state) {
DCHECK(web_state_);
web_state_->AddPolicyDecider(this);
}
WebStatePolicyDecider::~WebStatePolicyDecider() {
if (web_state_) {
web_state_->RemovePolicyDecider(this);
}
}
WebStatePolicyDecider::PolicyDecision WebStatePolicyDecider::ShouldAllowRequest(
NSURLRequest* request,
const WebStatePolicyDecider::RequestInfo& request_info) {
return WebStatePolicyDecider::PolicyDecision::Allow();
}
void WebStatePolicyDecider::ShouldAllowResponse(
NSURLResponse* response,
bool for_main_frame,
base::OnceCallback<void(PolicyDecision)> callback) {
std::move(callback).Run(PolicyDecision::Allow());
}
void WebStatePolicyDecider::ResetWebState() {
web_state_->RemovePolicyDecider(this);
web_state_ = nullptr;
}
} // namespace web