#ifndef CHROME_TEST_INTERACTION_DOM_MESSAGE_OBSERVER_H_
#define CHROME_TEST_INTERACTION_DOM_MESSAGE_OBSERVER_H_
#include <string>
#include <vector>
#include "content/public/test/browser_test_utils.h"
#include "ui/base/interaction/element_identifier.h"
#include "ui/base/interaction/state_observer.h"
class DomMessageObserverBase {
public:
explicit DomMessageObserverBase(
ui::ElementIdentifier instrumented_webcontents);
protected:
virtual void OnMessageReceived(const std::string& message) = 0;
private:
void AddCallback();
void OnMessageAvailable();
content::DOMMessageQueue queue_;
};
class LatestDomMessageObserver : DomMessageObserverBase,
public ui::test::StateObserver<std::string> {
public:
explicit LatestDomMessageObserver(
ui::ElementIdentifier instrumented_webcontents);
~LatestDomMessageObserver() override;
protected:
void OnMessageReceived(const std::string& message) override;
};
class DomMessageHistoryObserver
: DomMessageObserverBase,
ui::test::StateObserver<std::vector<std::string>> {
public:
explicit DomMessageHistoryObserver(
ui::ElementIdentifier instrumented_webcontents);
~DomMessageHistoryObserver() override;
protected:
void OnMessageReceived(const std::string& message) override;
private:
std::vector<std::string> messages_;
};
#endif