137 lines
4.8 KiB
C
137 lines
4.8 KiB
C
|
// Copyright (c) 2022 The Chromium Embedded Framework Authors. All rights
|
||
|
// reserved. Use of this source code is governed by a BSD-style license that
|
||
|
// can be found in the LICENSE file.
|
||
|
|
||
|
#ifndef CEF_TESTS_CEFTESTS_MESSAGE_ROUTER_UNITTEST_UTILS_H_
|
||
|
#define CEF_TESTS_CEFTESTS_MESSAGE_ROUTER_UNITTEST_UTILS_H_
|
||
|
#pragma once
|
||
|
|
||
|
#include <cstdlib>
|
||
|
|
||
|
#include "include/base/cef_callback.h"
|
||
|
#include "include/base/cef_weak_ptr.h"
|
||
|
#include "include/cef_v8.h"
|
||
|
#include "include/wrapper/cef_closure_task.h"
|
||
|
#include "tests/ceftests/routing_test_handler.h"
|
||
|
#include "tests/ceftests/test_util.h"
|
||
|
#include "tests/gtest/include/gtest/gtest.h"
|
||
|
#include "tests/shared/renderer/client_app_renderer.h"
|
||
|
|
||
|
using client::ClientAppRenderer;
|
||
|
|
||
|
extern const char kJSQueryFunc[];
|
||
|
extern const char kJSQueryCancelFunc[];
|
||
|
|
||
|
#define S1(N) #N
|
||
|
#define S2(N) S1(N)
|
||
|
#define LINESTR S2(__LINE__)
|
||
|
|
||
|
// Handle the renderer side of the routing implementation.
|
||
|
class MRRenderDelegate : public ClientAppRenderer::Delegate {
|
||
|
public:
|
||
|
class V8HandlerImpl : public CefV8Handler {
|
||
|
public:
|
||
|
explicit V8HandlerImpl(CefRefPtr<MRRenderDelegate> delegate)
|
||
|
: delegate_(delegate) {}
|
||
|
|
||
|
bool Execute(const CefString& name,
|
||
|
CefRefPtr<CefV8Value> object,
|
||
|
const CefV8ValueList& arguments,
|
||
|
CefRefPtr<CefV8Value>& retval,
|
||
|
CefString& exception) override;
|
||
|
|
||
|
private:
|
||
|
CefRefPtr<MRRenderDelegate> delegate_;
|
||
|
|
||
|
IMPLEMENT_REFCOUNTING(V8HandlerImpl);
|
||
|
};
|
||
|
|
||
|
void OnWebKitInitialized(CefRefPtr<ClientAppRenderer> app) override;
|
||
|
|
||
|
void OnContextCreated(CefRefPtr<ClientAppRenderer> app,
|
||
|
CefRefPtr<CefBrowser> browser,
|
||
|
CefRefPtr<CefFrame> frame,
|
||
|
CefRefPtr<CefV8Context> context) override;
|
||
|
|
||
|
void OnContextReleased(CefRefPtr<ClientAppRenderer> app,
|
||
|
CefRefPtr<CefBrowser> browser,
|
||
|
CefRefPtr<CefFrame> frame,
|
||
|
CefRefPtr<CefV8Context> context) override;
|
||
|
|
||
|
bool OnProcessMessageReceived(CefRefPtr<ClientAppRenderer> app,
|
||
|
CefRefPtr<CefBrowser> browser,
|
||
|
CefRefPtr<CefFrame> frame,
|
||
|
CefProcessId source_process,
|
||
|
CefRefPtr<CefProcessMessage> message) override;
|
||
|
|
||
|
private:
|
||
|
CefRefPtr<CefMessageRouterRendererSide> message_router_;
|
||
|
|
||
|
IMPLEMENT_REFCOUNTING(MRRenderDelegate);
|
||
|
};
|
||
|
|
||
|
class MRTestHandler : public TestHandler {
|
||
|
public:
|
||
|
void RunTest() override;
|
||
|
void OnAfterCreated(CefRefPtr<CefBrowser> browser) override;
|
||
|
void OnBeforeClose(CefRefPtr<CefBrowser> browser) override;
|
||
|
void OnRenderProcessTerminated(CefRefPtr<CefBrowser> browser,
|
||
|
TerminationStatus status) override;
|
||
|
|
||
|
// Only call this method if the navigation isn't canceled.
|
||
|
bool OnBeforeBrowse(CefRefPtr<CefBrowser> browser,
|
||
|
CefRefPtr<CefFrame> frame,
|
||
|
CefRefPtr<CefRequest> request,
|
||
|
bool user_gesture,
|
||
|
bool is_redirect) override;
|
||
|
// Returns true if the router handled the navigation.
|
||
|
bool OnProcessMessageReceived(CefRefPtr<CefBrowser> browser,
|
||
|
CefRefPtr<CefFrame> frame,
|
||
|
CefProcessId source_process,
|
||
|
CefRefPtr<CefProcessMessage> message) override;
|
||
|
|
||
|
CefRefPtr<CefMessageRouterBrowserSide> GetRouter() const;
|
||
|
void SetMessageSizeThreshold(size_t message_size_treshold);
|
||
|
|
||
|
protected:
|
||
|
virtual void RunMRTest() = 0;
|
||
|
|
||
|
virtual void AddHandlers(
|
||
|
CefRefPtr<CefMessageRouterBrowserSide> message_router) = 0;
|
||
|
|
||
|
virtual void OnNotify(CefRefPtr<CefBrowser> browser,
|
||
|
CefRefPtr<CefFrame> frame,
|
||
|
const std::string& message) = 0;
|
||
|
|
||
|
bool AssertQueryCount(CefRefPtr<CefBrowser> browser,
|
||
|
CefMessageRouterBrowserSide::Handler* handler,
|
||
|
int expected_count);
|
||
|
void AssertMainBrowser(CefRefPtr<CefBrowser> browser);
|
||
|
|
||
|
private:
|
||
|
CefRefPtr<CefMessageRouterBrowserSide> message_router_;
|
||
|
size_t message_size_threshold_ = 0;
|
||
|
|
||
|
IMPLEMENT_REFCOUNTING(MRTestHandler);
|
||
|
};
|
||
|
|
||
|
// Implementation of MRTestHandler that loads a single page.
|
||
|
class SingleLoadTestHandler : public MRTestHandler,
|
||
|
public CefMessageRouterBrowserSide::Handler {
|
||
|
public:
|
||
|
SingleLoadTestHandler();
|
||
|
const std::string& GetMainURL() { return main_url_; }
|
||
|
|
||
|
protected:
|
||
|
void RunMRTest() override;
|
||
|
void AddHandlers(
|
||
|
CefRefPtr<CefMessageRouterBrowserSide> message_router) override;
|
||
|
virtual void AddOtherResources() {}
|
||
|
virtual std::string GetMainHTML() = 0;
|
||
|
void AssertMainFrame(CefRefPtr<CefFrame> frame);
|
||
|
|
||
|
private:
|
||
|
const std::string main_url_;
|
||
|
};
|
||
|
|
||
|
#endif // CEF_TESTS_CEFTESTS_MESSAGE_ROUTER_UNITTEST_UTILS_H_
|