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 @@ ...@@ -18,6 +18,9 @@
#include "ios/web/public/web_state/web_state_observer.h" #include "ios/web/public/web_state/web_state_observer.h"
#include "url/gurl.h" #include "url/gurl.h"
@class NSURLRequest;
@class NSURLResponse;
namespace web { namespace web {
// Minimal implementation of WebState, to be used in tests. // Minimal implementation of WebState, to be used in tests.
...@@ -76,8 +79,8 @@ class TestWebState : public WebState { ...@@ -76,8 +79,8 @@ class TestWebState : public WebState {
void RemoveObserver(WebStateObserver* observer) override; void RemoveObserver(WebStateObserver* observer) override;
void AddPolicyDecider(WebStatePolicyDecider* decider) override {} void AddPolicyDecider(WebStatePolicyDecider* decider) override;
void RemovePolicyDecider(WebStatePolicyDecider* decider) override {} void RemovePolicyDecider(WebStatePolicyDecider* decider) override;
WebStateInterfaceProvider* GetWebStateInterfaceProvider() override; WebStateInterfaceProvider* GetWebStateInterfaceProvider() override;
void DidChangeVisibleSecurityState() override {} void DidChangeVisibleSecurityState() override {}
bool HasOpener() const override; bool HasOpener() const override;
...@@ -102,6 +105,12 @@ class TestWebState : public WebState { ...@@ -102,6 +105,12 @@ class TestWebState : public WebState {
// Getters for test data. // Getters for test data.
CRWContentView* GetTransientContentView(); 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. // Notifier for tests.
void OnPageLoaded(PageLoadCompletionStatus load_completion_status); void OnPageLoaded(PageLoadCompletionStatus load_completion_status);
...@@ -135,6 +144,9 @@ class TestWebState : public WebState { ...@@ -135,6 +144,9 @@ class TestWebState : public WebState {
// A list of observers notified when page state changes. Weak references. // A list of observers notified when page state changes. Weak references.
base::ObserverList<WebStateObserver, true> observers_; base::ObserverList<WebStateObserver, true> observers_;
// All the WebStatePolicyDeciders asked for navigation decision. Weak
// references.
base::ObserverList<WebStatePolicyDecider, true> policy_deciders_;
}; };
} // namespace web } // namespace web
......
...@@ -4,13 +4,14 @@ ...@@ -4,13 +4,14 @@
#import "ios/web/public/test/fakes/test_web_state.h" #import "ios/web/public/test/fakes/test_web_state.h"
#import <Foundation/Foundation.h>
#include <stdint.h> #include <stdint.h>
#include "base/bind.h" #include "base/bind.h"
#include "base/callback.h" #include "base/callback.h"
#include "base/threading/sequenced_task_runner_handle.h" #include "base/threading/sequenced_task_runner_handle.h"
#import "ios/web/public/web_state/ui/crw_content_view.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" #include "ui/gfx/image/image.h"
#if !defined(__has_feature) || !__has_feature(objc_arc) #if !defined(__has_feature) || !__has_feature(objc_arc)
...@@ -42,6 +43,10 @@ TestWebState::TestWebState() ...@@ -42,6 +43,10 @@ TestWebState::TestWebState()
TestWebState::~TestWebState() { TestWebState::~TestWebState() {
for (auto& observer : observers_) for (auto& observer : observers_)
observer.WebStateDestroyed(this); observer.WebStateDestroyed(this);
for (auto& observer : policy_deciders_)
observer.WebStateDestroyed();
for (auto& observer : policy_deciders_)
observer.ResetWebState();
}; };
WebStateDelegate* TestWebState::GetDelegate() { WebStateDelegate* TestWebState::GetDelegate() {
...@@ -284,6 +289,24 @@ CRWContentView* TestWebState::GetTransientContentView() { ...@@ -284,6 +289,24 @@ CRWContentView* TestWebState::GetTransientContentView() {
return transient_content_view_; 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) { void TestWebState::SetCurrentURL(const GURL& url) {
url_ = url; url_ = url;
} }
...@@ -300,6 +323,14 @@ CRWWebViewProxyType TestWebState::GetWebViewProxy() const { ...@@ -300,6 +323,14 @@ CRWWebViewProxyType TestWebState::GetWebViewProxy() const {
return web_view_proxy_; 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() { WebStateInterfaceProvider* TestWebState::GetWebStateInterfaceProvider() {
return nullptr; return nullptr;
} }
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
namespace web { namespace web {
class WebState; class WebState;
class TestWebState;
// Decides the navigation policy for a web state. // Decides the navigation policy for a web state.
class WebStatePolicyDecider { class WebStatePolicyDecider {
...@@ -55,6 +56,7 @@ class WebStatePolicyDecider { ...@@ -55,6 +56,7 @@ class WebStatePolicyDecider {
private: private:
friend class WebStateImpl; friend class WebStateImpl;
friend class TestWebState;
// Resets the current web state. // Resets the current web state.
void ResetWebState(); 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