// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef IOS_WEB_PUBLIC_JS_MESSAGING_SCRIPT_MESSAGE_H_
#define IOS_WEB_PUBLIC_JS_MESSAGING_SCRIPT_MESSAGE_H_
#include <memory>
#include <optional>
#include "base/values.h"
#include "url/gurl.h"
namespace web {
// Represents a script message sent from JavaScript.
class ScriptMessage {
public:
explicit ScriptMessage(std::unique_ptr<base::Value> body,
bool is_user_interacting,
bool is_main_frame,
std::optional<GURL> request_url);
~ScriptMessage();
ScriptMessage& operator=(const ScriptMessage&) = delete;
ScriptMessage(const ScriptMessage&);
// Returns the message body.
base::Value* body() const { return body_.get(); }
// Whether or not the user was interacting with the page when this message
// was sent.
bool is_user_interacting() const { return is_user_interacting_; }
// Whether or not this message came from the main frame.
bool is_main_frame() const { return is_main_frame_; }
// The url, if available, of the frame which sent this message.
std::optional<GURL> request_url() const { return request_url_; }
private:
std::unique_ptr<base::Value> body_;
bool is_user_interacting_;
bool is_main_frame_;
std::optional<GURL> request_url_;
};
} // namespace web
#endif // IOS_WEB_PUBLIC_JS_MESSAGING_SCRIPT_MESSAGE_H_