#ifndef FUCHSIA_WEB_WEBENGINE_WEB_ENGINE_INTEGRATION_TEST_BASE_H_
#define FUCHSIA_WEB_WEBENGINE_WEB_ENGINE_INTEGRATION_TEST_BASE_H_
#include <fuchsia/web/cpp/fidl.h>
#include <lib/fidl/cpp/binding.h>
#include <lib/sys/cpp/component_context.h>
#include <string>
#include <string_view>
#include "base/command_line.h"
#include "base/fuchsia/filtered_service_directory.h"
#include "base/test/task_environment.h"
#include "fuchsia_web/common/test/test_navigation_listener.h"
#include "net/test/embedded_test_server/embedded_test_server.h"
#include "testing/gtest/include/gtest/gtest.h"
class WebEngineIntegrationTestBase : public testing::Test {
public:
WebEngineIntegrationTestBase();
~WebEngineIntegrationTestBase() override;
WebEngineIntegrationTestBase(const WebEngineIntegrationTestBase&) = delete;
WebEngineIntegrationTestBase& operator=(const WebEngineIntegrationTestBase&) =
delete;
void SetUp() override;
virtual void StartWebEngine(base::CommandLine command_line) = 0;
virtual fuchsia::web::ContextProvider* GetContextProvider() = 0;
base::FilteredServiceDirectory& filtered_service_directory() {
return filtered_service_directory_;
}
TestNavigationListener* navigation_listener() const {
CHECK(navigation_listener_);
return navigation_listener_.get();
}
fuchsia::web::Context* context() const {
CHECK(context_);
return context_.get();
}
fuchsia::web::NavigationControllerPtr CreateNavigationController();
fuchsia::web::CreateContextParams TestContextParams();
fuchsia::web::CreateContextParams TestContextParamsWithTestData();
void CreateContext(fuchsia::web::CreateContextParams context_params);
void CreateFrameWithParams(fuchsia::web::CreateFrameParams frame_params);
void CreateContextAndFrame(fuchsia::web::CreateContextParams context_params);
void CreateContextAndExpectError(fuchsia::web::CreateContextParams params,
zx_status_t expected_error);
void CreateContextAndFrameAndLoadUrl(fuchsia::web::CreateContextParams params,
const GURL& url);
void LoadUrlAndExpectResponse(
std::string_view url,
fuchsia::web::LoadUrlParams load_url_params = {});
void GrantPermission(fuchsia::web::PermissionType type,
const std::string& origin);
std::string ExecuteJavaScriptWithStringResult(std::string_view script);
double ExecuteJavaScriptWithDoubleResult(std::string_view script);
bool ExecuteJavaScriptWithBoolResult(std::string_view script);
protected:
const base::test::TaskEnvironment task_environment_;
net::EmbeddedTestServer embedded_test_server_;
fuchsia::web::ContextPtr context_;
fuchsia::web::FramePtr frame_;
private:
void CreateNavigationListener();
std::unique_ptr<TestNavigationListener> navigation_listener_;
std::unique_ptr<fidl::Binding<fuchsia::web::NavigationEventListener>>
navigation_listener_binding_;
base::FilteredServiceDirectory filtered_service_directory_;
};
#endif