Commit 75854af0 authored by mrefaat's avatar mrefaat Committed by Commit Bot

Add methods for policy decider to fake TestWebState


Bug: 623016
Cq-Include-Trybots: master.tryserver.chromium.mac:ios-simulator-cronet;master.tryserver.chromium.mac:ios-simulator-full-configs
Change-Id: I67f24017a4be006fe53e59b0f49355e70833ffeb
Reviewed-on: https://chromium-review.googlesource.com/980809Reviewed-by: default avatarEugene But <eugenebut@chromium.org>
Commit-Queue: Mohammad Refaat <mrefaat@chromium.org>
Cr-Commit-Position: refs/heads/master@{#546221}
parent a8138ee1
......@@ -18,6 +18,9 @@
#include "ios/web/public/web_state/web_state_observer.h"
#include "url/gurl.h"
@class NSURLRequest;
@class NSURLResponse;
namespace web {
// Minimal implementation of WebState, to be used in tests.
......@@ -76,8 +79,8 @@ class TestWebState : public WebState {
void RemoveObserver(WebStateObserver* observer) override;
void AddPolicyDecider(WebStatePolicyDecider* decider) override {}
void RemovePolicyDecider(WebStatePolicyDecider* decider) override {}
void AddPolicyDecider(WebStatePolicyDecider* decider) override;
void RemovePolicyDecider(WebStatePolicyDecider* decider) override;
WebStateInterfaceProvider* GetWebStateInterfaceProvider() override;
void DidChangeVisibleSecurityState() override {}
bool HasOpener() const override;
......@@ -102,6 +105,12 @@ class TestWebState : public WebState {
// Getters for test data.
CRWContentView* GetTransientContentView();
// Uses |policy_deciders| to return whether the navigation corresponding to
// |request| should be allowed. Defaults to true.
bool ShouldAllowRequest(NSURLRequest* request, ui::PageTransition transition);
// Uses |policy_deciders| to return whether the navigation corresponding to
// |response| should be allowed. Defaults to true.
bool ShouldAllowResponse(NSURLResponse* response, bool for_main_frame);
// Notifier for tests.
void OnPageLoaded(PageLoadCompletionStatus load_completion_status);
......@@ -135,6 +144,9 @@ class TestWebState : public WebState {
// A list of observers notified when page state changes. Weak references.
base::ObserverList<WebStateObserver, true> observers_;
// All the WebStatePolicyDeciders asked for navigation decision. Weak
// references.
base::ObserverList<WebStatePolicyDecider, true> policy_deciders_;
};
} // namespace web
......
......@@ -4,13 +4,14 @@
#import "ios/web/public/test/fakes/test_web_state.h"
#import <Foundation/Foundation.h>
#include <stdint.h>
#include "base/bind.h"
#include "base/callback.h"
#include "base/threading/sequenced_task_runner_handle.h"
#import "ios/web/public/web_state/ui/crw_content_view.h"
#include "ios/web/public/web_state/web_state_observer.h"
#import "ios/web/public/web_state/web_state_policy_decider.h"
#include "ui/gfx/image/image.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
......@@ -42,6 +43,10 @@ TestWebState::TestWebState()
TestWebState::~TestWebState() {
for (auto& observer : observers_)
observer.WebStateDestroyed(this);
for (auto& observer : policy_deciders_)
observer.WebStateDestroyed();
for (auto& observer : policy_deciders_)
observer.ResetWebState();
};
WebStateDelegate* TestWebState::GetDelegate() {
......@@ -284,6 +289,24 @@ CRWContentView* TestWebState::GetTransientContentView() {
return transient_content_view_;
}
bool TestWebState::ShouldAllowRequest(NSURLRequest* request,
ui::PageTransition transition) {
for (auto& policy_decider : policy_deciders_) {
if (!policy_decider.ShouldAllowRequest(request, transition))
return false;
}
return true;
}
bool TestWebState::ShouldAllowResponse(NSURLResponse* response,
bool for_main_frame) {
for (auto& policy_decider : policy_deciders_) {
if (!policy_decider.ShouldAllowResponse(response, for_main_frame))
return false;
}
return true;
}
void TestWebState::SetCurrentURL(const GURL& url) {
url_ = url;
}
......@@ -300,6 +323,14 @@ CRWWebViewProxyType TestWebState::GetWebViewProxy() const {
return web_view_proxy_;
}
void TestWebState::AddPolicyDecider(WebStatePolicyDecider* decider) {
policy_deciders_.AddObserver(decider);
}
void TestWebState::RemovePolicyDecider(WebStatePolicyDecider* decider) {
policy_deciders_.RemoveObserver(decider);
}
WebStateInterfaceProvider* TestWebState::GetWebStateInterfaceProvider() {
return nullptr;
}
......
......@@ -13,6 +13,7 @@
namespace web {
class WebState;
class TestWebState;
// Decides the navigation policy for a web state.
class WebStatePolicyDecider {
......@@ -55,6 +56,7 @@ class WebStatePolicyDecider {
private:
friend class WebStateImpl;
friend class TestWebState;
// Resets the current web state.
void ResetWebState();
......
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